1 //JDBC连接数据库 2 //先在项目中引入mysql驱动jar包,网上下载有,之后才能进行连接 3 String className = "com.mysql.jdbc.Driver"; 4 //或者 new com.mysql.jdbc.Driver(); 效果一样 5 //每个URL是不同的。最后的格式是编码问题,容易导致java向mysql插入中文时,mysql数据库中显示是?问号 6 String url = "jdbc:mysql://localhost/db_stu?useUnicode=true&characterEncoding=utf8"; 7 String user = "root"; 8 String password =""; 9 Connection conn = null; 10 Statement stmt = null; 11 try 12 { 13 Class.forName(className); 14 conn = DriverManager.getConnection(url, user, password); 15 stmt = conn.createStatement(); 16 String sql = "insert into db_student values (1010,‘张三‘,‘23‘,‘男‘,‘BeiJing‘)"; 17 //返回SQL语句影响的行数 18 int i = stmt.executeUpdate(sql); 19 System.out.println("change :" + i); 20 System.out.println("all is good."); 21 } 22 catch(Exception e) 23 { 24 e.printStackTrace(); 25 } 26 finally 27 { 28 try 29 { 30 if(stmt != null) 31 { 32 stmt.close(); 33 stmt = null; 34 } 35 if(conn != null) 36 { 37 conn.close(); 38 conn = null; 39 } 40 } 41 catch(Exception e) 42 { 43 e.printStackTrace(); 44 } 45 } 46 47 48 //JDBC使用PreparedStatement进行设置参数 49 Connection conn = null; 50 PreparedStatement pstmt = null; 51 Class.forName(className); 52 conn = DriverManager.getConnection(url, user, password); 53 //插入参数是未知的,使用? 54 pstmt = conn.prepareStatement("insert into db_student values (?,?,?,?,?)"); 55 //设置参数 56 pstmt.setInt(1, 1004); 57 pstmt.setString(2, "Fuck"); 58 pstmt.setString(3,"22"); 59 pstmt.setString(4, "man"); 60 pstmt.setString(5, "TianJin"); 61 pstmt.executeUpdate(); 62 //JDBC使用存储过程 63 Connection conn = null; 64 CallableStatement cstmt = null; 65 Class.forName(className); 66 conn = DriverManager.getConnection(url, user, password); 67 //处理存储过程,p(?,?,?,?)是存储过程,第一个,第二个是输入参数,第三个是输出参数,第四个即时输入参数又是输出参数 68 cstmt = conn.prepareCall("call p(?,?,?,?)"); 69 //指定第三个,第四个是输出参数 70 cstmt.registerOutParameter(3, Types.INTEGER); 71 cstmt.registerOutParameter(4, Types.INTEGER); 72 //设置第一,第二,第四参数 73 cstmt.setInt(1, 3); 74 cstmt.setInt(2, 4); 75 cstmt.setInt(4, 5); 76 cstmt.execute(); 77 System.out.println(cstmt.getInt(3)); 78 System.out.println(cstmt.getInt(4)); 79 //JDBC进行批处理,一个SQL语句需要一个Statement,使用批处理减少使用Statement 80 //JDBC的PreparedStatement也可以执行批处理 81 Statement stmt=conn.CreateStatement(); 82 stmt.addBatch("insert into db_student values (1001,‘jack‘,22)"); 83 stmt.addBatch("insert into db_student values (1001,‘jack‘,22)"); 84 stmt.addBatch("insert into db_student values (1001,‘jack‘,22)"); 85 stmt.executeBatch(); 86 stmt.close(); 87 //JDBC处理事务,默认的SQL语句是一个个提交,我们更改后,变成一次性提交 88 try 89 { 90 conn.setAutoComit(false); 91 Statement stmt=conn.CreateStatement(); 92 stmt.addBatch("insert into db_student values (1001,‘jack‘,22)"); 93 stmt.addBatch("insert into db_student values (1001,‘jack‘,22)"); 94 stmt.addBatch("insert into db_student values (1001,‘jack‘,22)"); 95 stmt.executeBatch(); 96 //JDBC进行提交 97 conn.comit(); 98 //将原来的设置改回去 99 conn.setAutoComit(true); 100 stmt.close(); 101 } 102 catch(ClassNotFoundException e) 103 { 104 e.printStackTrace(); 105 } 106 catch(SQLException e) 107 { 108 e.printStackTrace(); 109 try 110 { 111 if(conn != null) 112 { 113 conn.rollBack(); 114 conn.setAutoComit(true); 115 } 116 } 117 catch(SQLException e) 118 { 119 e.printStackTrace(); 120 } 121 } 122 finally 123 { 124 try 125 { 126 if(stmt != null) 127 { 128 stmt.close(); 129 stmt = null; 130 } 131 if(conn != null) 132 { 133 conn.close(); 134 conn = null; 135 } 136 } 137 catch(SQLException e) 138 { 139 e.printStackTrace(); 140 } 141 } 142 143 144 //JDBC可滚动的结果集 145 Class.forName(className); 146 conn = DriverManager.getConnection(url, user, password); 147 //结果集可以滚动来回移动,第一个参数是对于滚动不敏感,第二个参数是并发只读 148 stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 149 rs = stmt.executeQuery("select * from db_student"); 150 rs.next(); 151 //以int型取出第一个字段 152 System.out.println(rs.getInt(1)); 153 //跳到最后一行 154 rs.last(); 155 //以String型取出第二个字段 156 System.out.println(rs.getString(2)); 157 //是否是最后一行 158 System.out.println(rs.isLast()); 159 //是否是倒数第二行 160 System.out.println(rs.isAfterLast()); 161 //这是第几行 162 System.out.println(rs.getRow()); 163 //整体前进一行 164 rs.previous(); 165 System.out.println(rs.getString(2)); 166 //定位到第二行 167 rs.absolute(2); 168 System.out.println(rs.getInt(1)); 169 170 //JDBC可更新的结果集 171 Class.forName(className); 172 conn = DriverManager.getConnection(url, user, password); 173 //对回滚不敏感,并发是处理,即ResultSet再内存中修改,然后同步数据库修改 174 stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 175 rs = stmt.executeQuery("select * from db_student"); 176 rs.next(); 177 //更新一行数据 178 rs.updateString(4, "man"); 179 rs.updateRow(); 180 //插入新行 181 rs.moveToInsertRow(); 182 rs.updateInt(1, 1007); 183 rs.updateString(2, "FUCK"); 184 rs.updateString(3, "22"); 185 rs.updateString(4, "man"); 186 rs.updateString(5, "hennan"); 187 rs.insertRow(); 188 rs.moveToCurrentRow(); 189 //定位到第五行,然后删除 190 rs.absolute(6); 191 rs.deleteRow(); 192 193 //DateSource & RowSet 194 /* 195 DateSource 196 DriverManager的替代 197 连接池实现 198 分布式实现 199 RowSet 200 新的ResultSet 201 从ResultSet继承 202 支持断开的结果集 203 支持JavaBean标准 204 */