Jdbc 入门

xiaoxiao2021-02-28  59

package it.cast.demo; import static org.hamcrest.CoreMatchers.nullValue; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; public class Demo2 { /* * 连接数据库 得到Connection就算成功 对数据库做增删改 */ @Test public void fun1() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); // jdbc的格式 // 对mysql而言 它的子协议结构是: //主机:端口号/数据库名称 String url = "jdbc:mysql://localhost:3306/mydb1"; String username = "root"; String password = "123"; Connection con = DriverManager.getConnection(url, username, password); /* * 1通过Connection对象创建Statement >Statement语句的发送器 他的功能是向数据库发送sql语句 * 2.调用它的int executeUpdate(String sql) 它可以发送DML,DDL */ // 1 Statement stmt = con.createStatement(); // 2 String sql = "INSERT INTO stu VALUES('ITCAST_0004','wangWu',88,'male')"; // String sql = "UPDATE stu SET name = 'zhaoLiu',age=22,gender='female' // WHERE number='ITCAST_0004'"; // String sql ="DELETE FROM stu"; int r = stmt.executeUpdate(sql); System.out.println(r); } /* * 执行查询 */ @Test public void fun2() throws ClassNotFoundException, SQLException { /* * 1.得到Connection 2.得到Statement 发送select语句 3.对查询返回的表格进行解析 * */ String driverClassName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/exam"; String username = "root"; String password = "123"; Class.forName(driverClassName); Connection con = DriverManager.getConnection(url, username, password); Statement stmt = con.createStatement(); String sql = ""; // 调用Statement的ResultSet rs = stmt.executeQuery(String querySql) ResultSet rs = stmt.executeQuery("SELECT * FROM emp"); System.out.println(rs); // 解析ResultSet // 1.把行光标移动到第一行 可以调用next()方法 while (rs.next()) { int empno = rs.getInt(1); // 通过列编号来获取该列的值 String ename = rs.getString("ename"); // 通过列名称 double sal = rs.getDouble("sal"); System.out.println(empno + "..." + ename + "..." + sal); } // 最后 关闭资源 倒关 rs.close(); stmt.close(); con.close(); // 这个必须关 } // 规范化 @Test public void fun3() throws Exception { Connection con = null; // 定义引用 Statement stmt = null; ResultSet rs = null; try { String driverClassName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/exam"; String username = "root"; String password = "123"; Class.forName(driverClassName); con = DriverManager.getConnection(url, username, password); // 实例化 stmt = con.createStatement(); String sql = "select * from emp"; rs = stmt.executeQuery(sql); // getString() 和getObject*()基本通用 // while (rs.next()) { // System.out.println(rs.getObject(1) + ", " + // rs.getString("ename")+rs.getDouble("sal")); // } int count = rs.getMetaData().getColumnCount();//计算出有多少列 while (rs.next()) { // 遍历行 for (int i = 1; i <= count; i++) { // 遍历列 注意这里i最小等于1 System.out.print(rs.getString(i)); if (i < count) { System.out.print("..."); } } System.out.println(); } } catch (Exception e) { throw new RuntimeException(e); } finally { if (con != null) con.close(); if (stmt != null) stmt.close(); if (rs != null) rs.close(); } } }

加强版

package it.cast.demo; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; /** * 学习 PreparedStatement * 防sql攻击 * @author 10958 * */ public class Demo3 { /** * 登录 * 使用username和password去查询数据库 * 若查出结果集 则正确true * 这个存在sql攻击 所以用2 * @param username * @param password * @return * @throws ClassNotFoundException * @throws SQLException */ public boolean login(String username,String password) throws ClassNotFoundException, SQLException { //1得到Connection //2得到Statement //3得到ResultSet //4rs.next()返回的是什么 我们就返回啥 String driverClassName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/mydb3"; String mysqlUsername = "root"; String mysqlPassword = "123"; Class.forName(driverClassName); Connection con = DriverManager.getConnection(url,mysqlUsername,mysqlPassword); Statement stmt = con.createStatement(); String sql = "select * from t_user where username='"+username+"' and password = '"+ password+"'"; System.out.println(sql); ResultSet rs = stmt.executeQuery(sql); return rs.next(); } public boolean login2(String username,String password) throws ClassNotFoundException, SQLException { //1得到Connection //2得到Statement //3得到ResultSet //4rs.next()返回的是什么 我们就返回啥 String driverClassName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/mydb3"; String mysqlUsername = "root"; String mysqlPassword = "123"; Class.forName(driverClassName); Connection con = DriverManager.getConnection(url,mysqlUsername,mysqlPassword); // Statement stmt = con.createStatement(); // String sql = "select * from t_user where username='"+username+"' and password = '"+ password+"'"; // System.out.println(sql); // ResultSet rs = stmt.executeQuery(sql); // return rs.next(); / /* * 得到PreparedStatement * 1.给出sql模版 :所有的参数用?来替代 * 2调用Connection方法 得到PreparedStatement * 3.调用PreparedStatement的getXxx()方法给?赋值 * 4.调用pstmt的executeUpdate或 Query */ String sql = "select * from t_user where username=? and password=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, username); //给第一个问号赋值 值为username; pstmt.setString(2, password); //第二个问号赋值 ResultSet rs = pstmt.executeQuery(); return rs.next(); } @Test public void fun1() throws ClassNotFoundException, SQLException{ /* * sql 攻击 * */ String username = "a' or 'a'='a"; String password = "a' or 'a'='a"; boolean bool = login(username, password); System.out.println(bool); //login("zhangSan", "123"); } @Test public void fun2() throws ClassNotFoundException, SQLException{ String username = "zhangSan"; String password = "123"; boolean bool = login2(username, password); System.out.println(bool); } @Test public void fun3() throws SQLException{ Connection con = JdbcUtils.getConnection(); System.out.println(con); } }

创建一个1.0版本的jdbc工具类

package it.cast.demo; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class JdbcUtils { private static Properties props = null; // 只在JdbcUtils类被加载时执行一次 static { // 给pros初始化 即加载dbconfig.properties文件到pros try { InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties"); props = new Properties(); props.load(in); } catch (IOException e) { throw new RuntimeException(e); } // 加载驱动类 try { Class.forName(props.getProperty("driverClassName")); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } //获取连接 public static Connection getConnection() throws SQLException { /* * 1.加载配置文件 2.加载驱动类 3/调用DriverManager.getConnection() * */ // InputStream in = // JdbcUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties"); // Properties props = new Properties(); // props.load(in); return DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"), props.getProperty("password")); } }

往mysql存取文件

package it.cast.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.rowset.serial.SerialBlob; import org.apache.commons.io.IOUtils; import org.junit.Test; import sun.nio.ch.IOUtil; /** * 大数据 * @author 10958 * */ public class Demo4 { /** * 把mp3保存到数据库 * @throws SQLException * @throws IOException * @throws FileNotFoundException */ @Test public void fun1() throws SQLException, FileNotFoundException, IOException{ Connection con = JdbcUtils.getConnection(); String sql = "INSERT INTO tab_bin values(?,?,?)"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, 2); pstmt.setString(2, "星空.MP3"); /* * 需要得到Blob * 把文件转化成byte[] * 在创建BLob */ byte[] bytes = IOUtils.toByteArray(new FileInputStream("D:/星空.mp3")); Blob blob = new SerialBlob(bytes); pstmt.setBlob(3, blob); pstmt.executeUpdate(); } //读取MP3 @Test public void fun2() throws SQLException, IOException{ Connection con = JdbcUtils.getConnection(); String sql = "select * from tab_bin"; PreparedStatement pstmt = con.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); //获取名为data的列数据 if (rs.next()) { Blob blob = rs.getBlob("data"); /* * 把Blob变成硬盘上的文件 * 1.通过Blob得到输入流对象 * 2.自己创建输出流对象 * 3.把输入流的数据写入到输出流中 */ InputStream in = blob.getBinaryStream(); OutputStream out = new FileOutputStream("D:/xingkong.mp3"); IOUtils.copy(in, out); } } }

批处理  首先需要在url后面加上rewriteBatchedStatements=true

例如:String url = "jdbc:mysql://localhost:3306/exam?reewriteBatchedStatements=true"

转载请注明原文地址: https://www.6miu.com/read-2623188.html

最新回复(0)