JDBC的学习之路(一)
使用sql要配置路径
首先到官网下载 http://dev.MySQL.com/downloads/connector/
因为是java与数据库连接,所以选择 Connector/J
download -->(mysql-connector-java-5.1.43.tar.gz) 不用登陆,鼠标下滑到底端,选择No thanks,just start my download
-----------------版本下载自己想要的就行 -------------------
下载之后解压
然后在所在项目右键单击
选择
Build Path-->Configure Build Path-->Libraries界面下,选择 Add External JARs-->找到mysql-connector-java-5.1.43-bin.jar位置选中后确定,ok,即可
Driver接口
----Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以啦
----在编程中要连接数据库,必须先装载特定厂家的数据库驱动程序,不同的数据库有不同的装载方法. 这里推荐下载Navicat for MySQL绿色版.官网下载,https://navicatformysql.en.softonic.com/ 解压,配置,(配置中有一项,一般选择utf-8.......) 263
----驱动就是各个数据库厂商实现的Sun公司提供的JDBC接口,即对Connection等接口的实现类的jar文件
----装载MySQL驱动
--Class.forName("com.mysql.jdbc.Driver");
----装载Oracle驱动
--Class.forName("oracle.jdbc.driver.OracleDriver");
Connection接口
----Connection与特定数据库连接(会话),在连接上下文中执行SQL语句并返回结果.
----DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上
----连接MySQL数据库:
--Connection conn=DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");
----连接ORACLE数据库:
--Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@host:port:database","user","password");
1 package com.jxust.jdbc; 2 /** 3 * 测试和数据库建立连接 4 5 * 6 */ 7 import java.sql.Connection; 8 import java.sql.DriverManager; 9 import java.sql.SQLException; 10 11 12 public class Demo01 { 13 14 //测试和数据库建立连接 15 public static void main(String[] args) { 16 Connection conn=null; 17 try { 18 //加载驱动类 19 Class.forName("com.mysql.jdbc.Driver"); 20 long start=System.currentTimeMillis(); 21 //建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时,这是Connection对象管理的一个要点) 22 //在真正的开发中,为了提高效率,都会使用连接池管理连接对象 23 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","*****"); 24 long end=System.currentTimeMillis(); //主机IP 端口/数据库名 user 密码 25 System.out.println(conn); 26 System.out.println("建立连接,耗时为:"+(end-start)+"ms毫秒"); 27 28 } catch (ClassNotFoundException | SQLException e) { 29 30 e.printStackTrace(); 31 } 32 finally{ 33 if(conn!=null){ //连接的关闭 34 try { 35 conn.close(); 36 } catch (SQLException e) { 37 38 e.printStackTrace(); 39 } 40 } 41 } 42 } 43 }
1 package com.jxust.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 9 public class Demo02 { 10 11 //测试Statement接口用法,执行SQL语句,以及SQL注入问题 12 public static void main(String[] args) { 13 Statement stmt=null; 14 Connection conn=null; 15 try { 16 //加载驱动类 17 Class.forName("com.mysql.jdbc.Driver"); 18 //建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时,这是Connection对象管理的一个要点) 19 //在真正的开发中,为了提高效率,都会使用连接池管理连接对象 20 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","z****"); 21 System.out.println(conn); 22 stmt=conn.createStatement(); 23 // String name="xiamu"; 24 //传参只能采用拼字符串的形式,很容易被遭到破坏 25 // String sql="insert into t_user(username,pwd,regTime) values('"+name+"',555,now())"; 26 // String sql="insert into t_user(username,pwd,regTime) values('xiamu',555,now())"; 27 // stat.execute(sql); 28 29 //测试SQL注入 30 String id="5 or 1=1"; 31 String sql="delete from t-user where id="+id; //永为true,数据库数据会被恶意改动,不安全, 32 // String sql="delete from t_user where id=5"; 33 stmt.execute(sql); 34 35 } catch (ClassNotFoundException | SQLException e) { 36 37 e.printStackTrace(); 38 }finally{ 39 if(stmt!=null){ //后开的先关 40 try { 41 stmt.close(); 42 } catch (SQLException e) { 43 44 e.printStackTrace(); 45 } 46 } 47 if(conn!=null){ 48 try { 49 conn.close(); 50 } catch (SQLException e) { 51 52 e.printStackTrace(); 53 } 54 } 55 } 56 } 57 }
1 package com.jxust.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; 7 8 /** 9 * 测试PreparedStatement的基本用法 10 */ 11 12 //测试PreparedStatement的基本用法 13 public class Demo03 { 14 15 16 public static void main(String[] args) { 17 PreparedStatement ps=null; 18 Connection conn=null; 19 try { //加载驱动类 20 Class.forName("com.mysql.jdbc.Driver"); 21 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","z****"); 22 23 /** 24 * ? 占位符,在输入对应值的时候会进行预处理,可以防止SQL注入 25 */ 26 String sql="insert into t_user(username,pwd,regTime) values(?,?,?)"; 27 ps=conn.prepareStatement(sql); 28 // ps.setString(1, "happy1"); //参数索引是从1开始计算,而不是0, 29 // ps.setString(2, "123"); //根据row的属性不懂,选择不同的setXxx方法,setDate(),setDouble();..... 30 // ps.setString(1, "happy2"); //继续插入happy2 31 // ps.setString(2, "12456"); 32 // ps.setDate(3, new java.sql.Date(System.currentTimeMillis())); 33 34 //也可以使用setObject方法处理参数,避免记各个类型的烦恼 35 ps.setObject(1, "happy4"); 36 ps.setObject(2, "7889"); 37 ps.setObject(3, new java.sql.Date(System.currentTimeMillis())); 38 //java.sql.Date是java.Util.Date的子类 39 40 41 System.out.println("插入一行记录"); 42 // ps.execute(); 43 int count=ps.executeUpdate(); //executeUpdate 运行insert/update/delete操作,返回更新行数 executeQuery() 返回结果集对象 44 System.out.println(count); 45 } catch (ClassNotFoundException | SQLException e) { 46 // TODO Auto-generated catch block 47 e.printStackTrace(); 48 }finally{ 49 if(ps!=null){ 50 try { 51 ps.close(); 52 } catch (SQLException e) { 53 e.printStackTrace(); 54 } 55 } 56 if(conn!=null){ 57 try { 58 conn.close(); 59 } catch (SQLException e) { 60 e.printStackTrace(); 61 } 62 } 63 } 64 } 65 }
1 package com.jxust.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 /** 10 * 测试ResultSet接口的基本用法 11 */ 12 13 14 public class Demo04 { 15 /** 16 * 测试ResultSet接口的基本用法 17 * 依序关闭使用之对象及连接 ResultSet-->Statement-->Connection 18 * 一定要分开写(如果其中一个异常,要保证下面的也关闭,嵌套写就不会有这种效果) 19 * @param args 20 */ 21 22 public static void main(String[] args) { 23 PreparedStatement ps=null; 24 Connection conn=null; 25 ResultSet rs=null; 26 try { //加载驱动类 27 Class.forName("com.mysql.jdbc.Driver"); 28 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","****"); 29 30 String sql="select id,username,pwd from t_user where id>?"; //select*from....是返回所有的列 31 ps=conn.prepareStatement(sql); 32 ps.setObject(1, 2); //把id大于2的记录都取出来 33 34 rs=ps.executeQuery(); 35 36 while(rs.next()){ //Iterator式迭代,每调用一次,next移动一位,同时返回一个判断下一个是否为空的boolean值 37 System.out.println(rs.getInt(1)+"----"+rs.getString(2)+"----"+rs.getString(3)); 38 } 39 40 } catch (ClassNotFoundException | SQLException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 }finally{ 44 if(rs!=null){ 45 try { 46 rs.close(); 47 } catch (SQLException e) { 48 49 e.printStackTrace(); 50 } 51 } 52 if(ps!=null){ 53 try { 54 ps.close(); 55 } catch (SQLException e) { 56 e.printStackTrace(); 57 } 58 } 59 if(conn!=null){ 60 try { 61 conn.close(); 62 } catch (SQLException e) { 63 e.printStackTrace(); 64 } 65 } 66 } 67 } 68 }