JDBC
JDBC基本连接知识:
没有使用加工厂的链接
(没有使用加工厂的链接)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
public class Conn {
public staticvoid main(String[] args) { // addUser("cw", "77777777777"); // selectAll(); //deleteUserById(5); updateUserById(2,"神马","都是浮云"); }
publicstaticvoid selectAll() { Connection conn = null; try { // forName方法写上驱动类的完整路径 // 表示的是一个类加载器通过包名+类名来加载对应的类 // 类加载器会通过反射来加载字符串指定的类的实例 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 创建一个数据库连接 String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=sofeem"; conn = DriverManager.getConnection(url,"sa","1234"); System.out.println(conn); // 可以通过创建的conn去访问数据库建立了程序和数据库之间的连接 // 查询tb_user表中的所有信息 // 创建一个statement对象将sql语句发送到数据库执行 Statement st = conn.createStatement(); String sql = "select * from tb_user"; // 执行查询返回执行之后的结果集创建结果集的对象来接收返回回来的多条数据 // 如果是查询操作,则调用executeQuery方法 // 如果是增加、删除、修改操作则调用executeUpdate()方法 ResultSet rs = st.executeQuery(sql); // 从结果集中取出对应的值 while (rs.next()) { System.out.println("用户id:" + rs.getString("uid")); System.out.println("用户姓名:" + rs.getString("uname")); System.out.println(rs.getString("upass")); }
} catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
//往用户表中增加一条记录 publicstatic void addUser(String name, String pass) { Connection conn = null; Statement st = null; PreparedStatement ps = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection( "jdbc:sqlserver://localhost:1433;databaseName=sofeem", "sa", "1234"); ps = conn .prepareStatement("insert into tb_user(uname,upass) values(?,?)"); // 给问好赋值 ps.setString(1, name); ps.setString(2, pass); // 执行 ps.executeUpdate(); // 增加完成就完了,没有结果集的返回 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } }
}
//根据id进行删除一条记录 public static void deleteUserById(int id) { Connection conn = null; PreparedStatement ps = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection( "jdbc:sqlserver://localhost:1433;databaseName=sofeem", "sa", "1234"); // 创建sql语句预编译对象 String sql = "delete from tb_user where uid=?"; ps = conn.prepareStatement(sql); // 给问好赋值 ps.setInt(1, id); ps.executeUpdate();
} catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭数据库连接 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } }
}
//根据uid来更新用户名和密码 public staticvoid updateUserById(int id, String name, String pass) { Connection conn = null; PreparedStatement ps=null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection( "jdbc:sqlserver://192.168.0.179:1433;databaseName=sofeem", "sa", "1234"); String sql="update tb_user set uname=?,upass=? where uid=?"; ps=conn.prepareStatement(sql); ps.setString(1, name); ps.setString(2, pass); ps.setInt(3, id);
ps.executeUpdate(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { ps.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
// PreparedStatement 与 Statement的区别? /* * 1 Ps与s 都是对sql语句到数据库中执行返回对应的数据,但是Ps有对sql语句进行预编译的过程,而s是直接执行 * 2 Ps执行sql语句的效率高于s执行sql语句的效率 * 如果在多次执行同一个操作的时候,那么Ps处理sql语句只需要编译一次,第二次处理sql语句就直接使用已经编译好的sql语句 * 如果使用的是s,则每次处理相同的操作的时候,每次都需要对sql语句进行编译再到数据库中执行 * 3 Ps的安全性高于s * 正是因为Ps能够对sql语句进行预编译,所以它能够防止sql语句注入攻击,而s是直接执行sql语句,没有预编译过程 * 则不能够防止sql注入 * * */ }
|
使用加工厂的链接
(使用加工厂的链接) package com.ibm.jdbc;
import java.sql.Connection; importjava.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
public class CopyOfConn {
publicstaticvoid main(String[] args) { // addUser("aaaa", "bbbbbbbbbb"); selectAll(); // deleteUserById(5); // updateUserById(2,"神马","都是浮云"); }
publicstatic void selectAll() { Connection conn = null; try { conn=ConnFactory.getConn(); Statement st = conn.createStatement(); String sql = "select * from tb_user"; ResultSet rs = st.executeQuery(sql); while (rs.next()) { System.out.println("用户id:" + rs.getString("uid")); System.out.println("用户姓名:" + rs.getString("uname")); System.out.println(rs.getString("upass")); } } catch (SQLException e) { e.printStackTrace(); } finally { ConnFactory.closeConn(conn,null); } }
//往用户表中增加一条记录 publicstatic void addUser(String name, String pass) { Connection conn = null; PreparedStatement ps = null; try { conn=ConnFactory.getConn(); ps = conn .prepareStatement("insert into tb_user(uname,upass) values(?,?)"); // 给问好赋值 ps.setString(1, name); ps.setString(2, pass); // 执行 ps.executeUpdate(); // 增加完成就完了,没有结果集的返回 }catch (SQLException e) { e.printStackTrace(); } finally { ConnFactory.closeConn(conn, ps); }
}
//根据id进行删除一条记录 public staticvoid deleteUserById(int id) { Connection conn = null; PreparedStatement ps = null; try { conn=ConnFactory.getConn(); String sql = "delete from tb_user where uid=?"; ps = conn.prepareStatement(sql); // 给问好赋值 ps.setInt(1, id); ps.executeUpdate();
} catch (SQLException e) { e.printStackTrace(); } finally { // 关闭数据库连接 ConnFactory.closeConn(conn, ps); }
}
//根据uid来更新用户名和密码 public staticvoid updateUserById(int id, String name, String pass) { Connection conn = null; PreparedStatement ps=null; try { conn =ConnFactory.getConn(); String sql="update tb_user set uname=?,upass=? where uid=?"; ps=conn.prepareStatement(sql); ps.setString(1, name); ps.setString(2, pass); ps.setInt(3, id);
ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ ConnFactory.closeConn(conn, ps); } }
// PreparedStatement 与 Statement的区别? /* * 1 Ps与s 都是对sql语句到数据库中执行返回对应的数据,但是Ps有对sql语句进行预编译的过程,而s是直接执行 * 2 Ps执行sql语句的效率高于s执行sql语句的效率 * 如果在多次执行同一个操作的时候,那么Ps处理sql语句只需要编译一次,第二次处理sql语句就直接使用已经编译好的sql语句 * 如果使用的是s,则每次处理相同的操作的时候,每次都需要对sql语句进行编译再到数据库中执行 * 3 Ps的安全性高于s * 正是因为Ps能够对sql语句进行预编译,所以它能够防止sql语句注入攻击,而s是直接执行sql语句,没有预编译过程 * 则不能够防止sql注入 * * */
}
|
DTO_DAO_实现增删改查
|
事务提交
|