JDBC 使用说明(流程、架构、编程)
程序员文章站
2024-03-05 14:30:36
jdbc api 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
执行流程:
•连接数据源,如:数据库。
•为数据库传递查询...
jdbc api 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
执行流程:
•连接数据源,如:数据库。
•为数据库传递查询和更新指令。
•处理数据库响应并返回的结果。
jdbc 架构
分为双层架构和三层架构。
双层
作用:此架构中,java applet 或应用直接访问数据源。
条件:要求 driver 能与访问的数据库交互。
机制:用户命令传给数据库或其他数据源,随之结果被返回。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 c/s配置(可以是内联网或互联网)。
三层
侧架构特殊之处在于,引入中间层服务。
流程:命令和结构都会经过该层。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
历史趋势: 以往,因性能问题,中间层都用 c 或 c++ 编写,随着优化编译器(将 java 字节码 转为 高效的 特定机器码)和技术的发展,如ejb,java 开始用于中间层的开发这也让 java 的优势突显出现出来,使用 java 作为服务器代码语言,jdbc随之被重视。
jdbc 编程步骤
加载驱动程序:
class.forname(driverclass) //加载mysql驱动 class.forname("com.mysql.jdbc.driver") //加载oracle驱动 class.forname("oracle.jdbc.driver.oracledriver")
获得数据库连接:
复制代码 代码如下:
drivermanager.getconnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");
创建statement\preparedstatement对象:
复制代码 代码如下:
conn.createstatement();
conn.preparestatement(sql);
完整实例
import java.sql.connection; import java.sql.drivermanager; import java.sql.resultset; import java.sql.statement; 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"; public static void main(string[] args) throws exception { //1.加载驱动程序 class.forname("com.mysql.jdbc.driver"); //2. 获得数据库连接 connection conn = drivermanager.getconnection(url, user, password); //3.操作数据库,实现增删改查 statement stmt = conn.createstatement(); resultset rs = stmt.executequery("select user_name, age from imooc_goddess"); //如果有数据,rs.next()返回true while(rs.next()){ system.out.println(rs.getstring("user_name")+" 年龄:"+rs.getint("age")); } } }
增删改查
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; } }