JDBC——概念及使用步骤

it2023-01-05  61

1.JDBC的概念

JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC提供了对Java程序员,数据库厂商、第三方中间件厂商的API JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据

2.使用步骤

(1)加载驱动程序

//装载MySql驱动 Class.forName("com.mysql.jdbc.Driver"); //装载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver");

(2)获得数据库连接

URL的格式:“协议:子协议://主机:端口号/数据库名”

例如:“jdbc:mysql://127.0.0.1:3306/imooc”

//URL:URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库 //userName:数据库的登录名 //passWord:数据库的登录密码 Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

(3)创建Statement、PreparedStatement对象

1.创建Statement对象 Statement stmt = conn.createStatement(); 1.创建PreparedStatement对象 PreparedStatement ptmt = conn.prepareStatement(sql);

常用的Statement方法

execute(String sql):运行语句,返回是否有结果集executeQuery(String sql):运行select语句,返回ResultSet结果集。executeUpdate(String sql):运行insert/update/delete操作,返回更新行数。addBatch(String sql) :把多条sql语句放到一个批处理中executeBatch():向数据库发送一批sql语句执行。 //:静态SQL操作,每次操作都会将sql语句提交到数据库执行一次,性能比较低 conn.createStatement(); //动态SQL操作,预编译操作性能比Statement高 conn.prepareStatement(sql);

Statement、prepareStatement区别和联系

prepareStatement中 sql语句中会有问号,即为不确定的操作数据,在下面的代码中,执行一天插入语句,中间的问号即为不确定的插入数,在预执行时,仅仅只是知道接下来需要插入数据这一操作,而不知道具体的插入数据,如果需要插入多条数据,仅仅改变问号的值即可,计算机不会再判断是什么操作,因为在预执行时它就知道是插入语句了。

//1、注册驱动 Class.forName(driver); //2、获取连接 //这里的url userName passWord前面已经解释过了就不再重述。 conn= DriverManager.getConnection(url, userName, passWord); //3、创建prepareStatement对象 String sql="insert into student values(?,?,?)"; //预编译sql,减少数据库语句的执行 PreparedStatement ps=conn.prepareStatement(sql); //4、执行sql语句 //代表设置给第一个?号位置的值为Int类型的21 ps.setInt(1,20); //代表设置给第二个?号位置的值为String类型的suwu150 ps.setString(2,"miaoling"); //进行类型转换,由util类型的date转化为sql类型的 java.util.Date utilDate=new java.util.Date(); //代表设置给第三个?号位置的值为sql.Date类型的时间 ps.setDate(3, new java.sql.Date(utilDate.getTime())); //执行表输出返回的结果,结果为false,因为没有返回的结果集 System.out.println(ps.execute());

Statement中sql语句就是完整的数据库插入语句,对于一条数据而言没有什么性能问题,但是数据量一旦很多,就会在每次插入数据的时候执行完整的数据库语句,计算机每次都要判断是什么操作的语句再执行该操作,性能就会大大降低。

//1、注册驱动 Class.forName(driver); //2、获取连接 conn= DriverManager.getConnection(url, userName, passWord); //3、创建statement对象 stat=conn.createStatement(); //4、执行sql语句 String sql="insert into student values(20,'miaoling',to_date('21-9-2016','dd-mm-yyyy'))"; //注意格式 //stat.execute(sql); //返回值为false,因为同样没有ResultSet返回集 System.out.println(stat.execute(sql));

注意!!!

在Statement、prepareStatement最后执行时,前者是stat.execute(sql),后者是ps.execute()

增删改查完整实例演示

//建立连接的实现过程 public class DbUtil { public static final String URL = "jdbc:mysql://localhost:3306/imooc"; public static final String USER = "liulx"; public static final String PASSWORD = "123456"; private static Connection conn = null; static{ try { //1.加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); //2. 获得数据库连接 conn = DriverManager.getConnection(URL, USER, PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public static Connection getConnection(){ return conn; } } //具体的对象(对应数据库的表) package liulx.model; import java.util.Date; public class Goddess { private Integer id; private String user_name; private Integer sex; private Integer age; private Date birthday; //注意用的是java.util.Date private String email; private String mobile; private String create_user; private String update_user; private Date create_date; private Date update_date; private Integer isDel; //getter setter方法。。。 } //---------dao层-------------- package liulx.dao; import liulx.db.DbUtil; import liulx.model.Goddess; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class GoddessDao { //增加 public void addGoddess(Goddess g) throws SQLException { //获取连接 Connection conn = DbUtil.getConnection(); //sql String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile,"+ "create_user, create_date, update_user, update_date, isdel)" +"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)"; //预编译 PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行 //传参 ptmt.setString(1, g.getUser_name()); ptmt.setInt(2, g.getSex()); ptmt.setInt(3, g.getAge()); ptmt.setDate(4, new Date(g.getBirthday().getTime())); ptmt.setString(5, g.getEmail()); ptmt.setString(6, g.getMobile()); ptmt.setString(7, g.getCreate_user()); ptmt.setString(8, g.getUpdate_user()); ptmt.setInt(9, g.getIsDel()); //执行 ptmt.execute(); } public void updateGoddess(){ //获取连接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "UPDATE imooc_goddess" + " set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+ " update_user=?, update_date=CURRENT_DATE(), isdel=? "+ " where id=?"; //预编译 PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行 //传参 ptmt.setString(1, g.getUser_name()); ptmt.setInt(2, g.getSex()); ptmt.setInt(3, g.getAge()); ptmt.setDate(4, new Date(g.getBirthday().getTime())); ptmt.setString(5, g.getEmail()); ptmt.setString(6, g.getMobile()); ptmt.setString(7, g.getUpdate_user()); ptmt.setInt(8, g.getIsDel()); ptmt.setInt(9, g.getId()); //执行 ptmt.execute(); } //————————————删除———————————— public void delGoddess(){ //获取连接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "delete from imooc_goddess where id=?"; //预编译SQL,减少sql执行 PreparedStatement ptmt = conn.prepareStatement(sql); //传参 ptmt.setInt(1, id); //执行 ptmt.execute(); } public List<Goddess> query() throws SQLException { Connection conn = DbUtil.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess"); List<Goddess> gs = new ArrayList<Goddess>(); Goddess g = null; while(rs.next()){ g = new Goddess(); g.setUser_name(rs.getString("user_name")); g.setAge(rs.getInt("age")); gs.add(g); } return gs; } //——————————————查找———————————— public Goddess get(){ Goddess g = null; //获取连接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "select * from imooc_goddess where id=?"; //预编译SQL,减少sql执行 PreparedStatement ptmt = conn.prepareStatement(sql); //传参 ptmt.setInt(1, id); //执行 ResultSet rs = ptmt.executeQuery(); while(rs.next()){ g = new Goddess(); g.setId(rs.getInt("id")); g.setUser_name(rs.getString("user_name")); g.setAge(rs.getInt("age")); g.setSex(rs.getInt("sex")); g.setBirthday(rs.getDate("birthday")); g.setEmail(rs.getString("email")); g.setMobile(rs.getString("mobile")); g.setCreate_date(rs.getDate("create_date")); g.setCreate_user(rs.getString("create_user")); g.setUpdate_date(rs.getDate("update_date")); g.setUpdate_user(rs.getString("update_user")); g.setIsDel(rs.getInt("isdel")); } return g; } }
最新回复(0)