900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > JDBC连接(MySql)数据库步骤 以及查询 插入 删除 更新等十一个处理数据库信息的功能。...

JDBC连接(MySql)数据库步骤 以及查询 插入 删除 更新等十一个处理数据库信息的功能。...

时间:2019-08-19 22:59:20

相关推荐

JDBC连接(MySql)数据库步骤 以及查询 插入 删除 更新等十一个处理数据库信息的功能。...

主要内容:

JDBC连接数据库步骤。一个简单详细的查询数据的例子。封装连接数据库,释放数据库连接方法。实现查询,插入,删除,更新等十一个处理数据库信息的功能。(包括事务处理,批量更新等)把十一个功能都放在一起。

安装下载的数据库驱动程序jar包,不同的数据库需要不同的驱动程序(这本该是第一步,但是由于属于安装类,所以我们放在最后)

一.JDBC连接数据库(编辑)步骤(主要有六个步骤)。

1.注册驱动: Class.forName("com.mysql.jdbc.Driver");显示的加载到JVM中

2.获取连接:(1) param1: 要连接数据库的url-----》String url="jdbc:mysql://localhost:3306/test?"+ "useUnicode=true&characterEncoding=UTF8";//防止乱码

param2:要连接数据库的用户名--》String user="h4";

param3:要连接数据库的密码----》 String pass="111";

Connection conn=DriverManager.getConnection(url,user,pass);//DriverManager下的方法:getConnection(String url,String username,String password)

(2)接下来我们分析下url:"jdbc(这是协议以jdbc开头):mysql(这是子协议,数据库管理系统名称)://localhost(数据库来源地址):3306(目标端口)/test(要查询的表)?"

"useUnicode=true&characterEncoding=UTF8";添加这个是为了防止乱码,指定使用Unicode字符集,且使用UTF-8来编辑。

3.创建一个Statement语句对象(主要三种方法): Statement stmt=conn.createStatement();//Connection接口下的方法:Statement createStatement()

PreparedStatementpstmt=conn.PreparedStatement() ;

CallableStatementcstmt=conn.prepareCall("{CALLdemoSp(?,?)}");

下面我们来分析下他们:(1)Statement与PreparedStatement对象的区别,后者可以动态设置查询参数

(2)设置参数的方法PreparedStatement.setXXXX(parameterIndex,value),如果数据库参数类型是varchar 则用setString,如果参数类型是Integer 则用setInt

(3)CallableStatement.setXXXX(parameterIndex,value)//按照参数的顺序设置value

CallableStatement.setXXXX(parameterName,value)//按照参数的名字来设置value,这个名字是在定义存储过程的时候的形式参数的名字

(4)CallableStatement.registerOutParameter方法用于声明一个存储过程输出类型的参数,用以接收存储过程的输出值

4.执行SQL语句: ResultSet rs=stmt.executeQuery(Sql);除了查询语句是executeQuery();其他全部是executeUpdate();

Statement接口下的方法:

boolean execute(String sql):执行SQL语句,如果返回值是结果集则为true,否则为false

ResultSet executeQuery(String sql):执行SQL语句,返回值为ResultSet

intexecuteUpdate(String sql):执行SQL语句,返回值为所影响的行数

5.处理结果集:ResultSet对象的getXxxx方法,取决于数据库中表的字段的类型,例如:varchar2 对应方法是getString,如果是integer对应方法是getInt/getLong

While(rs.next()){

rs.getInt(columnIndex);//通过列的序号来获取字段的值

rs.getString(columnName);//通过列的名字来获取字段的值

ResultSet接口下常见的方法:beforeFirst();将游标移动到ResultSet中第一条记录(的前面)

afterLast();将游标移动到ResultSet中最后一条记录(的后面)

absolute(intcolumn):将游标移动到相对于第一行的指定行,负数则为相对于最后一条记录

previous():将游标上移一行

next():将游标下移一行

ResultSet.TYPE_SCROLL_SENSITIVE结果集可以滚动

ResultSet.CONCUR_READ_ONLY 结果集只读,不能修改

6.关闭资源:操作完以后要关闭jdbc来释放jdbc资源。但是顺序要和你定义对象的时候相反,就像关门一样,从里面先关,一直往外关。

如下示例:

if(rs !=null){//1.关闭结果集

try{

rs.close();

} catch (SQLException e){

e.printStackTrace();

}

}

if(stmt !=null){//2.关闭声明的对象

try{

stmt.close();

}catch(SQLException e){

e.printStackTrace();

}

}

if(conn !=null){//3.关闭连接 (记住一定要先关闭前面的1.2.然后在关闭连接)

try{

conn.close();

}catch(Exception e){

e.printStackTrace();

}

}

二.下面是一个简单的(详细的)查询数据的例子。

1 package javacore1;//这是你建的一个包名。 2 3 import java.sql.CallableStatement; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; //左边这五个是你在写程序时要导入的包名,记住是要在java.sql下的包。 8 import java.sql.SQLException; 9 import java.sql.Statement;10 public class jdbc { //定义一个类11 public static void main(String[] args){ //主方法12 try{13 String driver="com.mysql.jdbc.Driver"; //1.定义驱动程序名为driver内容为com.mysql.jdbc.Driver14 String url="jdbc:mysql://localhost:3306/test?"//2.定义url;jdbc是协议;mysql是子协议:表示数据库系统管理名称;localhost:3306是你数据库来源的地址和目标端口;test是我本人建的表位置所在处,你以你的为标准。15 + "useUnicode=true&characterEncoding=UTF8"; //防止乱码;useUnicode=true表示使用Unicode字符集;characterEncoding=UTF8表示使用UTF-8来编辑的。16 String user="h4";//3.定义用户名,写你想要连接到的用户。17 String pass="111"; //4.用户密码。18 String querySql="select * from employees";//5.你想要查找的表名。19 Class.forName(driver);//6.注册驱动程序,用java.lang包下面的class类里面的Class.froName();方法 此处的driver就是1里面定义的driver,也可以 Class.forName("com.mysql.jdbc.Driver");21 Connection conn=DriverManager.getConnection(url,user,pass);//7.获取数据库连接,使用java.sql里面的DriverManager的getConnectin(String url , String username ,String password )来完成22 //括号里面的url,user,pass便是前面定义的2,3,4步骤内容;23 Statement stmt=conn.createStatement(); //8.构造一个statement对象来执行sql语句:主要有Statement,PreparedStatement,CallableStatement三种实例来实现24 // 三种实现方法分别为:Statement stmt = con.createStatement() ; 25 // PreparedStatement pstmt = conn.prepareStatement(sql) ; 26 // CallableStatement cstmt = conn.prepareCall("{CALL demoSp(? , ?)}") ;27 ResultSet rs=stmt.executeQuery(querySql);//9.执行sql并返还结束 ;ResultSet executeQuery(String sqlString):用于返还一个结果集(ResultSet)对象。28while(rs.next()){ //10.遍历结果集 29 System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary")+"姓名:"+rs.getString("last_name"));//使用getString()方法获取你表里的资料名30 }31if(rs !=null){//11.关闭记录集32 try{33rs.close();34 } catch (SQLException e){35 e.printStackTrace();36 }37}38if(stmt !=null){//12.关闭声明的对象39 try{40stmt.close();41 }catch(SQLException e){42 e.printStackTrace();43 }44}45if(conn !=null){//13.关闭连接 (记住一定要先关闭前面的11.12.然后在关闭连接,就像关门一样,先关里面的,最后关最外面的)46 try{47conn.close();48 }catch(SQLException e){49 e.printStackTrace();50 }51 }52 }catch(Exception e){53 e.printStackTrace();54 }55 }56}

三.为了更加直观,我们把获取数据库连接和释放连接封装在方法里,以便于后面更好的操作。

1 package javacore1; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 public class jdbc{ 7public static void main(String[] args){ 8 9Connection conn= getConnection("h4", "111"); //获取数据库连接10 11/*,,,,此处为方法名来获取连接,例如 query(conn),,,,,*/1213 releaseConnection(conn); // 释放数据库连接14 }1516/*,,,,,,,,,,此处构建一个你想要的功能的方法,,,,,,,,,,,,*/17 18 19 //数据库连接20 public static Connection getConnection(String user, String pass) {21 22Connection conn = null;//声明连接对象23String driver = "com.mysql.jdbc.Driver";// 驱动程序类名24String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL25+ "useUnicode=true&characterEncoding=UTF8";// 防止乱码26 try {27 Class.forName(driver);// 注册(加载)驱动程序28 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接29 } catch (Exception e) {30 e.printStackTrace();31 }32 return conn;33}34 // 释放数据库连接35 public static void releaseConnection(Connection conn) {36try {37if (conn != null)38conn.close();39 } catch (Exception e) {40e.printStackTrace();41 }42}43}

四.实现查询、插入、删除、更新等十一个处理数据库信息的功能。

1.查询数据

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 public class Query { 8public static void main(String[] args) { 9 Connection conn = getConnection("h4", "111");// 获取数据库连接10 query(conn);//方法名调用数据库连接11 releaseConnection(conn);//释放数据库连接12 }13 //查询数据,定义的query方法14 public static void query(Connection conn){15 String Sql="select * from employees";16 try{17 Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做18 ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束19 20 while(rs.next()){//遍历结果集 ,向下一行21 System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary"));22 }23 if(rs !=null){24 try{25 rs.close();26 } catch (SQLException e){27 e.printStackTrace();28 }29 }30 if(stmt !=null){31 try{32stmt.close();33 }catch(SQLException e){34 e.printStackTrace();35 }36 }37 if(conn !=null){38 try{39 conn.close();40}catch(SQLException e){41 e.printStackTrace();42 }43 }44}catch(Exception e){45 e.printStackTrace();46}47 }48 //数据库连接49 public static Connection getConnection(String user, String pass) {50 Connection conn = null;//声明连接对象51 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名52 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL53 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码54try {55 Class.forName(driver);// 注册(加载)驱动程序56 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接57} catch (Exception e) {58 e.printStackTrace();59 }60 return conn;61 }62 //释放数据库连接63 public static void releaseConnection(Connection conn) {64 try {65 if (conn != null)66 conn.close();67 } catch (Exception e) {68 e.printStackTrace();69 }70 }71 }

//查询数据,结果倒着显示,倒序package javacore1;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Query {public static void main(String[] args) {Connection conn = getConnection("h4", "111");// 获取数据库连接query(conn);//方法名调用数据库连接releaseConnection(conn);//释放数据库连接 }//查询数据,定义的query方法public static void query(Connection conn){String Sql="select * from employees";try{Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束 rs.afterLast();//先跳到最后一行 while(rs.previous()){//遍历结果集 ,向上一行System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary"));}if(rs !=null){try{rs.close();} catch (SQLException e){e.printStackTrace();}}if(stmt !=null){try{stmt.close();}catch(SQLException e){e.printStackTrace();}}if(conn !=null){try{conn.close();}catch(SQLException e){e.printStackTrace();}}}catch(Exception e){e.printStackTrace();}}//数据库连接public static Connection getConnection(String user, String pass) {Connection conn = null;//声明连接对象String driver = "com.mysql.jdbc.Driver";// 驱动程序类名String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL+ "useUnicode=true&characterEncoding=UTF8";// 防止乱码try {Class.forName(driver);// 注册(加载)驱动程序conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接} catch (Exception e) {e.printStackTrace();}return conn;}//释放数据库连接public static void releaseConnection(Connection conn) {try {if (conn != null)conn.close();} catch (Exception e) {e.printStackTrace();}}}

2.插入数据

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 public class Insert { 7public static void main(String[] args) { 8 Connection conn = getConnection("h3", "111111"); // 获取数据库连接 9 insert(conn); //方法名调用数据库连接10 releaseConnection(conn);// 释放数据库连接11 }12 //插入数据 13public static void insert(Connection conn) { 14 try { 15 String sql = "insert into employees(employee_id,last_name,salary,department_id,userid)" 16+ " values ('100010', 'xiaogou', '7000','004','9')"; // 插入数据的sql语句 17 Statement stmt1 =conn.createStatement(); // 创建用于执行静态sql语句的Statement对象 18 int count = stmt1.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数 19System.out.println("向biao中插入了 " + count + " 条数据"); //输出插入操作的处理结果 20conn.close(); //关闭数据库连接 21 } catch (SQLException e) { 22 e.printStackTrace(); 23 } 24 }25 //数据库连接26public static Connection getConnection(String user, String pass) {27 Connection conn = null;//声明连接对象28 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名29 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL30 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码31 try {32 Class.forName(driver);// 注册(加载)驱动程序33 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接34 } catch (Exception e) {35 e.printStackTrace();36 }37 return conn;38 }39 //释放数据库连接40public static void releaseConnection(Connection conn) {41 try {42 if (conn != null)43 conn.close();44 } catch (Exception e) {45 e.printStackTrace();46 }47 }48 }

3.删除数据

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 public class Delete { 7public static void main(String[] args) { 8 Connection conn = getConnection("h3", "111111"); // 获取数据库连接 9 delete(conn); //方法名调用数据库连接;10 releaseConnection(conn);// 释放数据库连接11 }12 //删除数据13public static void delete(Connection conn){14 String Sql = "delete from employees where employee_id=100009";15try {16Statement stmt = conn.createStatement();// 或者用PreparedStatement方法17stmt.executeUpdate(Sql);//执行sql语句18if (stmt != null) {19try {20stmt.close();21} catch (SQLException e) {22e.printStackTrace();23}24 }25} catch (SQLException e) {26e.printStackTrace();27 }28 29}30 //数据库连接31public static Connection getConnection(String user, String pass) {32 Connection conn = null;//声明连接对象33 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名34 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL35 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码36 try {37 Class.forName(driver);// 注册(加载)驱动程序38 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接39 } catch (Exception e) {40 e.printStackTrace();41 }42 return conn;43}44 // 释放数据库连接45public static void releaseConnection(Connection conn) {46 try {47 if (conn != null)48 conn.close();49 } catch (Exception e) {50 e.printStackTrace();51 }52}53 }

4.更新数据

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 public class Update { 7public static void main(String[] args) { 8Connection conn = getConnection("h3", "111111"); // 获取数据库连接 9 update(conn);//方法名调用数据库连接10releaseConnection(conn);// 释放数据库连接11}12 //更新数据 13 public static void update(Connection conn){14 String Sql = "update employees set salary=8000 where employee_id=100005";15try {16Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法17stmt1.executeUpdate(Sql);//执行sql语句18if (stmt1 != null) {19try {20 stmt1.close();21} catch (SQLException e) {22 e.printStackTrace();23}24}25 } catch (SQLException e) {26 e.printStackTrace();27}28 }29 //数据库连接30public static Connection getConnection(String user, String pass) {31 Connection conn = null;//声明连接对象32 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名33 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL34 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码35 try {36 Class.forName(driver);// 注册(加载)驱动程序37 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接38 } catch (Exception e) {39 e.printStackTrace();40 }41return conn;42}43 // 释放数据库连接44public static void releaseConnection(Connection conn) {45 try {46 if (conn != null)47 conn.close();48 } catch (Exception e) {49 e.printStackTrace();50 }51}52 }

5.转账(事物处理)

JDBC处理事务通过关闭连接的自动提交实现的:

Connection.setAutoCommit(false);

提交事务:

mit();

回滚事务

回滚部分:

Connection.rollback(Savepoint);

全部回滚:

Connection.rollback();

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.Statement; 5 public class TransCash { 6public static void main(String[] args) { 7 Connection conn = getConnection("h3", "111111");// 获取数据库连接 8 transCash(conn); //方法名调用数据库连接 9 releaseConnection(conn);// 释放数据库连接10 }11 //转账(数据调换)(原来数据为100和500,实现这个功能后变成500和100,其实说白了就是更新数据,改数据)12 public static void transCash(Connection conn){13 Statement stmt = null;14try{15 conn.setAutoCommit(false);//关闭自动提交16 String sql = "update employees set salary=500 where employee_id=100001";17 stmt = conn.createStatement();18 stmt.executeUpdate(sql); 19 sql = "update employees set salary=100 where employee_id=100002";20 stmt.executeUpdate(sql);//执行sql语句,上面的两个工资将会调换

//int i=1/0;如果这样,那么将不可以完成任务,因为这是一个完整的事物,有一点失败,将全部失败21 mit();//提交事务22 }catch(Exception e){23e.printStackTrace();24 }finally{25try{26if(stmt != null){ stmt.close();27 }catch(Exception e){28e.printStackTrace();29 }30 }31 }32 //数据库连接33public static Connection getConnection(String user, String pass) {34 Connection conn = null;//声明连接对象35 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名36 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL37 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码38 try {39 Class.forName(driver);// 注册(加载)驱动程序40 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接41 } catch (Exception e) {42 e.printStackTrace();43 }44 return conn;45}46 //释放数据库连接47public static void releaseConnection(Connection conn) {48 try {49 if (conn != null)50 conn.close();51 } catch (Exception e) {52 e.printStackTrace();53 }54}55 }

6.查找存储过程无参数的

1 package javacore1; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 public class ExecProc { 7public static void main(String[] args) { 8 Connection conn = getConnection("h3", "111111"); // 获取数据库连接 9 execProc(conn);//方法名调用数据库连接10 releaseConnection(conn);// 释放数据库连接11}12 //调用无参存储过程;13 public static void execProc(Connection conn){14String sql = "{call raisesalary}";15 try {16CallableStatement cstmt = conn.prepareCall(sql);17cstmt.executeUpdate();18 } catch (SQLException e) {19 e.printStackTrace();20 }21 }22 //数据库连接23 public static Connection getConnection(String user, String pass) {24 Connection conn = null;//声明连接对象25 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名26 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL27+ "useUnicode=true&characterEncoding=UTF8";// 防止乱码28 try {29 Class.forName(driver);// 注册(加载)驱动程序30 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接31 } catch (Exception e) {32 e.printStackTrace();33 }34 return conn;35 }36 // 释放数据库连接37 public static void releaseConnection(Connection conn) {38 try {39 if (conn != null)40conn.close();41 } catch (Exception e) {42 e.printStackTrace();43 }44 }45}

7.查找存储过程有参数的

1 package javacore1; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.Types; 6 public class GetMulti { 7public static void main(String[] args) { 8Connection conn = getConnection("h3", "111111"); // 获取数据库连接 9 int cnt = getMulti(conn); //查找存储过程; 10 System.out.println("人员编号:" + cnt); 11releaseConnection(conn);// 释放数据库连接12}13 //查找存储过程有参14public static int getMulti(Connection conn) {15 int dept_id = 100001;16 int cnt = 0;17 String sql = "{call calc_emp_count(?,?)}";18 try {19CallableStatement cstmt = conn.prepareCall(sql);//初始化Statement对象20cstmt.setInt(1, dept_id);//CallableStatement.setxxx(参数,值)或者(数字,值),而PreparedStatement.setxxx(数字,值)只能这样21cstmt.setInt(2, cnt); //22cstmt.registerOutParameter(2, Types.INTEGER);//声明输出参数23cstmt.executeUpdate();//执行sql语句24cnt = cstmt.getInt(2);//获取结果25 if (cstmt != null) {26 cstmt.close();// 释放Statement对象27}28 } catch (Exception e) {29e.printStackTrace();30 }31 return cnt;32 }33 //数据库连接34public static Connection getConnection(String user, String pass) {35 Connection conn = null;//声明连接对象36 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名37 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL38 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码39 try {40 Class.forName(driver);// 注册(加载)驱动程序41 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接42 } catch (Exception e) {43 e.printStackTrace();44 }45 return conn;46 }47 //释放数据库连接48public static void releaseConnection(Connection conn) {49 try {50 if (conn != null)51 conn.close();52 } catch (Exception e) {53 e.printStackTrace();54 }55 }56 }

8.普通处理

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.Date; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; 7 public class PlanInsert { 8public static void main(String[] args) { 9 Connection conn = getConnection("h3", "111111"); // 获取数据库连接10 planInsert(conn); //方法名调用数据库连接11 releaseConnection(conn);// 释放数据库连接12 }13 //普通处理14public static void planInsert(Connection conn) { 15try { 16String sql = "insert into test_user1(userid,username,loadingtime)" 17 + " values (?,?,?)"; // 插入数据的sql语句 18PreparedStatement pstmt=conn.prepareStatement(sql);19long startTime=System.currentTimeMillis();20 for(int i=0;i<1000;i++){21 pstmt.setLong(1, i);22 pstmt.setString(2, "user"+i);23 pstmt.setDate(3, new Date(System.currentTimeMillis()));24 pstmt.executeUpdate();25 }26System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));27pstmt.close(); //关闭数据库连接 28 } catch (SQLException e) { 29 e.printStackTrace(); 30} 31} 32 //数据库连接33public static Connection getConnection(String user, String pass) {34 Connection conn = null;//声明连接对象35 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名36 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL37 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码38 try {39 Class.forName(driver);// 注册(加载)驱动程序40 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接41 } catch (Exception e) {42 e.printStackTrace();43 }44 return conn;45 }46 //释放数据库连接47public static void releaseConnection(Connection conn) {48 try {49 if (conn != null)50 conn.close();51 } catch (Exception e) {52 e.printStackTrace();53 }54 }55 }

9.批量处理

获得原来JDBC事务的模式:

boolean currentTransactionModle = con.getAutoCommit();

设置成事务模式(关闭自动提交):

con.setAutoCommit(false);

Statement stm = con.createStatement();

三个异构的sql语句:

String sql1 = "delete from user where id = 8";

String sql2 = "update user set name='java' where id = 7";

String sql3 = "insert into user(name,password) values('jdbc','jdbc')";

添加到Statement的批量处理缓冲区中:

stm.addBatch(sql1);

stm.addBatch(sql2);

stm.addBatch(sql3);

执行批量更新:

stm.executeBatch();

提交本次批量更新的事务:

mit();

回复原来的事务模式:

con.setAutoCommit(currentTransactionModle);

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.Date; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; 7 public class BatchInsert { 8public static void main(String[] args) { 9 Connection conn = getConnection("h3", "111111"); // 获取数据库连接10 batchInsert(conn); //方法名调用数据库连接11 releaseConnection(conn);// 释放数据库连接12 }13 //批量插入的速度要比普通处理的速度快14public static void batchInsert(Connection conn) { 15try { 16String sql = "insert into test_user1(userid,username,loadingtime)" 17 + " values (?,?,?)"; // 插入数据的sql语句 18PreparedStatement pstmt=conn.prepareStatement(sql);19long startTime=System.currentTimeMillis();20 for(int i=0;i<1000;i++){21 pstmt.setLong(1, i);22 pstmt.setString(2, "user"+i);23 pstmt.setDate(3, new Date(System.currentTimeMillis()));24 pstmt.addBatch();//添加到批量处理25 }26 int[] result=pstmt.executeBatch();27 System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));28 pstmt.close(); //关闭数据库连接 29 } catch (SQLException e) { 30 e.printStackTrace(); 31} 32} 33 //数据库连接34public static Connection getConnection(String user, String pass) {35 Connection conn = null;//声明连接对象36 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名37 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL38 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码39 try {40 Class.forName(driver);// 注册(加载)驱动程序41 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接42 } catch (Exception e) {43 e.printStackTrace();44 }45 return conn;46 }47 //释放数据库连接48public static void releaseConnection(Connection conn) {49 try {50 if (conn != null)51 conn.close();52 } catch (Exception e) {53 e.printStackTrace();54 }55 }56 }

10.分页显示

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 public class Paging { 8public static void main(String[] args) { 9 Connection conn = getConnection("h3", "111111"); // 获取数据库连接10 paging(conn,1,3);//方法名调用数据库连接,且定义显示第几行到第几行11 releaseConnection(conn);// 释放数据库连接12 }13 //分页查询14public static void paging(Connection conn,int startIndex,int total){15 try{16 String sql="select * from employees limit ?,?";17 PreparedStatement pstmt=conn.prepareStatement(sql);18 pstmt.setInt(1, startIndex);19 pstmt.setInt(2, total);20 ResultSet rs=pstmt.executeQuery();21 while(rs.next()){22 System.out.print("工号:"+rs.getInt(1));23System.out.println("部门编号:"+rs.getInt("department_id"));24 }rs.close();25 pstmt.close();26 }catch(SQLException e){27 e.printStackTrace();28 }29}30 //数据库连接31public static Connection getConnection(String user, String pass) {32 Connection conn = null;//声明连接对象33 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名34 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL35 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码36 try {37 Class.forName(driver);// 注册(加载)驱动程序38 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接39 } catch (Exception e) {40 e.printStackTrace();41 }42 return conn;43 }44 // 释放数据库连接45public static void releaseConnection(Connection conn) {46 try {47 if (conn != null)48 conn.close();49 } catch (Exception e) {50 e.printStackTrace();51 }52 }53 }

11.结果集可以滚动

1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 public class ScrpllResult { 8public static void main(String[] args) { 9 Connection conn = getConnection("h3", "111111"); // 获取数据库连接10 scrpllResult(conn);//方法名调用数据库连接11 releaseConnection(conn);// 释放数据库连接12 }13 //结果集滚动显示14public static void scrpllResult(Connection conn){15 try{16 String sql="select * from employees";//结果集可以滚动//并发性,结果集只读,不可以修改17 PreparedStatement pstmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);18 ResultSet rs=pstmt.executeQuery();19 while(rs.next()){ //向下一行遍历20 System.out.print("工号:"+rs.getLong(1));21 System.out.println("名字"+rs.getString("last_name"));22 }while(rs.previous()){//向上一行遍历23 System.out.print("工号:"+rs.getLong(1));24 System.out.println("工资"+rs.getInt("salary"));25 }26rs.absolute(6);//表示直接跳到第几行27 if(rs.next()){28 System.out.print("工号:"+rs.getLong(1));29 System.out.println("..........部门编号:"+rs.getString("department_id"));30}31 rs.close();32 pstmt.close();33 }catch(SQLException e){34 e.printStackTrace();35 }36 } 37 //数据库连接38public static Connection getConnection(String user, String pass) {39 Connection conn = null;//声明连接对象40 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名41 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL42 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码43 try {44 Class.forName(driver);// 注册(加载)驱动程序45 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接46 } catch (Exception e) {47 e.printStackTrace();48 }49 return conn;50 }51 // 释放数据库连接52public static void releaseConnection(Connection conn) {53 try {54 if (conn != null)55 conn.close();56 } catch (Exception e) {57 e.printStackTrace();58 }59 }60 }

五.把上面十一个放在一起当然最方便省事。(需要用谁,只需把前面的注释打开便行)

1 package javacore1; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.Date; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 import java.sql.SQLException; 9 import java.sql.Statement; 10 import java.sql.Types; 11 public class jdbcMySql { 12 public static void main(String[] args) { 13Connection conn = getConnection("h3", "111111"); // 获取数据库连接 14 //query(conn); //1.查询数据 15 //insert(conn);//2.插入数据 16 //delete(conn);//3.删除数据 17 //update(conn);//4.更新数据 18 //transCash(conn);//5.转账 19 //execProc(conn);//6.查找存储过程无参数的 20 //int cnt = getMulti(conn);//7.查找存储过程有参数的 21 //System.out.println("人员编号:" + cnt);//查找存储过程有参数的 22 //planInsert(conn);//8.普通处理 23 //batchInsert(conn);//9.批量处理 24 // paging(conn,1,3);//10.分页显示 25 //scrpllResult(conn);//11.结果集可以滚动 26 releaseConnection(conn);// 释放数据库连接 27} 28 //1.查询数据,定义的query方法 29 public static void query(Connection conn){ 30 String Sql="select * from employees"; 31 try{ 32 Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做 33 ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束 34 35while(rs.next()){//遍历结果集 36 System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary")); 37 } 38 if(rs !=null){ 39 try{ 40 rs.close(); 41 } catch (SQLException e){ 42 e.printStackTrace(); 43 } 44 } 45 if(stmt !=null){ 46 try{ 47stmt.close(); 48 }catch(SQLException e){ 49 e.printStackTrace(); 50 } 51 } 52 if(conn !=null){ 53 try{ 54 conn.close(); 55}catch(SQLException e){ 56 e.printStackTrace(); 57 } 58 } 59}catch(Exception e){ 60 e.printStackTrace(); 61} 62 } 63 //2.插入数据64public static void insert(Connection conn) { 65 try { 66 String sql = "insert into employees(employee_id,last_name,salary,department_id,userid)" 67+ " values ('100010', 'xiaogou', '7000','004','9')"; // 插入数据的sql语句 68 Statement stmt1 =conn.createStatement(); // 创建用于执行静态sql语句的Statement对象 69 int count = stmt1.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数 70System.out.println("向biao中插入了 " + count + " 条数据"); //输出插入操作的处理结果 71conn.close(); //关闭数据库连接 72 } catch (SQLException e) { 73 e.printStackTrace(); 74 } 75 } 76 //3.删除数据 77public static void delete(Connection conn){ 78 String Sql = "delete from employees where employee_id=100009"; 79 try { 80 Statement stmt = conn.createStatement();// 或者用PreparedStatement方法 81 stmt.executeUpdate(Sql);//执行sql语句 82 if (stmt != null) { 83 try { 84 stmt.close(); 85 } catch (SQLException e) { 86 e.printStackTrace(); 87 } 88 } 89 } catch (SQLException e) { 90 e.printStackTrace(); 91 } 92 93 } 94 //4.更新数据 95public static void update(Connection conn){ 96String Sql = "update employees set salary=8000 where employee_id=100005"; 97 try { 98 Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法 99 stmt1.executeUpdate(Sql);//执行sql语句100 if (stmt1 != null) {101 try {102 stmt1.close();103 } catch (SQLException e) {104 e.printStackTrace();105 }106}107 } catch (SQLException e) {108e.printStackTrace();109 }110 } 111 //5.转账(数据调换)(原来数据为100和500,实现这个功能后变成500和100,其实说白了就是更新数据,改数据)112 public static void transCash(Connection conn){113 Statement stmt = null;114 try{115conn.setAutoCommit(false);//关闭自动提交116 String sql = "update employees set salary=500 where employee_id=100001";117 stmt = conn.createStatement();118 stmt.executeUpdate(sql); 119 sql = "update employees set salary=100 where employee_id=100002";120 stmt.executeUpdate(sql);//执行sql语句,上面的两个工资将会调换121mit();//提交事务122 }catch(Exception e){123 e.printStackTrace();124 }finally{125 try{126 if(stmt != null)stmt.close();127 }catch(Exception e){128 e.printStackTrace();129 }130}131 }132 //6.调用无参存储过程;133 public static void execProc(Connection conn){134 String sql = "{call raisesalary}";135 try {136 CallableStatement cstmt = conn.prepareCall(sql);137 cstmt.executeUpdate();138 } catch (SQLException e) {139 e.printStackTrace();140 }141 } 142 //7.查找存储过程有参143 public static int getMulti(Connection conn) {144 int dept_id = 100001;145 int cnt = 0;146 String sql = "{call calc_emp_count(?,?)}";147 try {148CallableStatement cstmt = conn.prepareCall(sql);//初始化Statement对象149cstmt.setInt(1, dept_id);//CallableStatement.setxxx(参数,值)或者(数字,值),而PreparedStatement.setxxx(数字,值)只能这样150cstmt.setInt(2, cnt); //151cstmt.registerOutParameter(2, Types.INTEGER);//声明输出参数152cstmt.executeUpdate();//执行sql语句153cnt = cstmt.getInt(2);//获取结果154 if (cstmt != null) {155 cstmt.close();// 释放Statement对象156}157 } catch (Exception e) {158e.printStackTrace();159 }160 return cnt;161 }162 //8.普通处理163public static void planInsert(Connection conn) { 164try { 165String sql = "insert into test_user1(userid,username,loadingtime)" 166 + " values (?,?,?)"; // 插入数据的sql语句 167PreparedStatement pstmt=conn.prepareStatement(sql);168long startTime=System.currentTimeMillis();169 for(int i=0;i<1000;i++){170 pstmt.setLong(1, i);171 pstmt.setString(2, "user"+i);172 pstmt.setDate(3, new Date(System.currentTimeMillis()));173 pstmt.executeUpdate();174 }175System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));176pstmt.close(); //关闭数据库连接 177 } catch (SQLException e) { 178 e.printStackTrace(); 179} 180} 181 //9.批量插入的速度要比普通处理的速度快182public static void batchInsert(Connection conn) { 183 try { 184String sql = "insert into test_user1(userid,username,loadingtime)" 185+ " values (?,?,?)"; // 插入数据的sql语句 186PreparedStatement pstmt=conn.prepareStatement(sql);187long startTime=System.currentTimeMillis();188 for(int i=0;i<1000;i++){189 pstmt.setLong(1, i);190 pstmt.setString(2, "user"+i);191 pstmt.setDate(3, new Date(System.currentTimeMillis()));192 pstmt.addBatch();//添加到批量处理193 }194 int[] result=pstmt.executeBatch();195System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));196 pstmt.close(); //关闭数据库连接 197} catch (SQLException e) { 198 e.printStackTrace(); 199 } 200}201 //10.分页查询202 public static void paging(Connection conn,int startIndex,int total){203 try{204 String sql="select * from employees limit ?,?";205 PreparedStatement pstmt=conn.prepareStatement(sql);206 pstmt.setInt(1, startIndex);207 pstmt.setInt(2, total);208 ResultSet rs=pstmt.executeQuery();209 while(rs.next()){210 System.out.print("工号:"+rs.getInt(1));211System.out.println("部门编号:"+rs.getInt("department_id"));212 }rs.close();213 pstmt.close();214}catch(SQLException e){215 e.printStackTrace();216 }217 }218 //11.结果集滚动显示219public static void scrpllResult(Connection conn){220try{221 String sql="select * from employees";//结果集可以滚动 //并发性,结果集只读,不可以修改222 PreparedStatement pstmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);223 ResultSet rs=pstmt.executeQuery();224while(rs.next()){ //向下一行遍历225 System.out.print("工号:"+rs.getLong(1));226 System.out.println("名字"+rs.getString("last_name"));227 }while(rs.previous()){//向上一行遍历228 System.out.print("工号:"+rs.getLong(1));229 System.out.println("工资"+rs.getInt("salary"));230}231 rs.absolute(6);//表示直接跳到第几行232 if(rs.next()){233 System.out.print("工号:"+rs.getLong(1));234 System.out.println("..........部门编号:"+rs.getString("department_id"));235}236 rs.close();237 pstmt.close();238 }catch(SQLException e){239 e.printStackTrace();240 }241} 242 //数据库连接243 public static Connection getConnection(String user, String pass) {244 Connection conn = null;//声明连接对象245 String driver = "com.mysql.jdbc.Driver";// 驱动程序类名246 String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL247 + "useUnicode=true&characterEncoding=UTF8";// 防止乱码248 try {249 Class.forName(driver);// 注册(加载)驱动程序250 conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接251 } catch (Exception e) {252e.printStackTrace();253 }254 return conn;255}256 //释放数据库连接257 public static void releaseConnection(Connection conn) {258try {259 if (conn != null)260conn.close();261} catch (Exception e) {262 e.printStackTrace();263}264}265 }

六.安装下载的数据库驱动程序jar包,不同的数据库需要不同的驱动程序(但是安装方法都是一样的)

在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是

打开eclipse 1.右击要导入jar包的项目,点properties

2.左边选择java build path,右边选择libraries

3.选择add External jars

4.选择jar包的按照路径下的

确定后就行了。

Java连接MySQL的最新驱动包下载地址

/downloads/connector/j

1.鼠标放在你建的根目录上面。右击,然后选择最下面的properties。

2.然后左边选择java build path,右边选择libraries ,在选择右边的add External jars ,选择jar包的路径,点击确定就可以了

3.装好后,图如下出现你要添加的包。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。