mysql了解jdbc_JDBC的连接mySql的基本知识

这只是我自己的随笔博客~,用于偶尔回忆知识,可能存在一些错误,如有错误,欢迎指正~

首先对于JDBC连接MySQL,要了解基本的框架结构

c946960f4ec0c8bdb6962fb34c5683bf.png

画的比较烂,大约就是这样的结构

然后看一下具体实现的 代码:;

public class DBUtil {

private String user = "root";

private String password = "root";

private String url = "jdbc:mysql://localhost:3306/mydb6";

private static DBUtil dbUtil;

Connection connection = null;

// 单例:构造方法私有化

private DBUtil() {

}

public synchronized static DBUtil getInstance() {

if (dbUtil == null) {

dbUtil = new DBUtil();

}

return dbUtil;

}

/**

* 创建数据库连接

*/

public Connection getConnection() {

if (connection == null) {

try {

// 注册驱动

Class.forName("com.mysql.jdbc.Driver");

// 获取连接

connection = DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return connection;

}

}

上面这个是通过单例模式  建立了DBUtil这样一个类。通过这个类可以干什么呢?可以实现----数据库的连接!

没错,Connection接口的作用就是连接数据库-

与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

怎样才能得到这个连接呢?--想要建立这个连接,你需要注册一个驱动---嗯~就是这个代码   Class.forName("com.mysql.jdbc.Driver");

它是通过反射的机制来获得的,不了解反射?嗯~那你记住就完了 哈哈哈

connection = DriverManager.getConnection(url, user, password);这一句话的是用来获取连接的 ,这三个参数分别是   数据的地址,jdbc:mysql://IP地址:端口号/数据库的名称

嗯~然年再将一下如何通过jdbc向数据库写入数据

public intinsertStuByStatement() {

String sql1= "insert into stu(sname,sage) values('aaa',1)";

String sql2= "insert into stu(sname,sage) values('bbb',1)";

String sql3= "insert into stu(sname,sage) values('ccc',1)";

Connection connection= getConnection();//获得数据库的连接

Statement stmt = null;try{

stmt=(Statement) connection.createStatement();

connection.setAutoCommit(false);

stmt.addBatch(sql1);//批量添加sql语句

stmt.addBatch(sql2);//批量添加sql语句

stmt.addBatch(sql3);//批量添加sql语句//一次性执行

stmt.executeBatch();

connection.commit();

System.out.println("批处理成功");

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if (stmt != null) {

stmt.close();

}

}catch(Exception e2) {

}

}returni;

}

这里使用的statement 来实现的,写出你要操作的 sql语句。(提一下,一般这些操作都是放在DBUtil类中的额 ,这个方法我也是放在DBUtil的)。

第二步:根据上面的定义的方法获取数据库。

下面就是获取一个Statement 对象,然后通过这个对象的stmt.executeBatch();就可以在数据库中执行刚才就的语句了,这样就做到了静态插入数据。

那动态插入数据是怎样的呢 ?-----那就是用到了另一个能够实现语句的对象PreparedStatement

直接上代码吧

public int insertStu(String sname,intsage){

String sql= "insert into stu(sname,sage) values(?,?)";

Connection connection= getConnection();//获得数据库的连接

PreparedStatement ps = null;int i = 0;try{

ps=(PreparedStatement) connection.prepareStatement(sql);

ps.setString(1, sname);

ps.setInt(2, sage);

i=ps.executeUpdate();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if (ps!=null) {

ps.close();

}

}catch(Exception e2) {

}

}returni;

}

定义的插入方法有了两个参数的数值

与statement的区别在哪呢?--一个是sql字符串语句的区别,多了“?”,作用是---看下面这两行代码

ps.setString(1, sname);

ps.setInt(2, sage);

ps.set****(a,b)有两个参数,sql语句中也有两个?,所以参数a,代表的是sql语句的第几个“?”,如果参数是1,则说明sql语句中第一个“?”的位置替换为参数b,

如果 同理如果参数是2,则说明sql语句中第一个“?”的位置替换为参数b.这样就做到了动态的插入数据,我们只要在调用插入方法的时候传入想要插入的数据就好了,不用每次都写新的sql语句。

对于 i=ps.executeUpdate();语句,它返回的这次你的数据库操作后有有几条数据有影响.这种方法对于插入,当然是i=1了但是对于产出和修改的就不是一定了,删除修改我直接贴代码了就不再做讲解

//修改

public int updateStu(intsage,String sname){

String sql= "updae stu set sage = ? where sname = ?";

Connection connection=getConnection();

PreparedStatement ps=null;int i = 0;try{

ps=(PreparedStatement) connection.prepareStatement(sql);

ps.setInt(1, sage);

ps.setString(2, sname);

i=ps.executeUpdate();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if (ps!=null) {

ps.close();

}

}catch(Exception e2) {

}

}returni;

}//删除

public int deleteStu(String sname,intsage) {

String sql= "delete from stu where sname=? and sage = ?";

Connection conn= getConnection();//获得数据库连接

PreparedStatement ps = null;int i = 0;try{

ps=(PreparedStatement) conn.prepareStatement(sql);

ps.setString(1, sname);

ps.setInt(2,sage );

i=ps.executeUpdate();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if(ps != null)

ps.close();

}catch(Exception e) {//TODO: handle exception

}

}returni;

}

数据库最重要的是什么---查询数据,相对于增删改--查可能稍微繁琐一点

代码如下:

/*** 查询所有学生

*@return

*/

public ArrayListqueryStu(){

String sql= "select * from stu ";//select * 或的字段的顺序和数据库中的是一致

Connection conn =getConnection();

PreparedStatement ps= null;

ResultSet rs= null;

ArrayList stus = new ArrayList();//此集合用于存储每一个学生对象

try{

ps=(PreparedStatement) conn.prepareStatement(sql);

rs=ps.executeQuery();//遍历rs

while(rs.next()) {//true表示有下一条数据

int id = rs.getInt("id");

String sname= rs.getString("sname");int sage = rs.getInt("sage");//创建stu对象

Stu stu = newStu(id, sname, sage);//收集对象

stus.add(stu);

}

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if(rs != null)

rs.close();if(ps != null)

ps.close();

}catch(Exception e) {//TODO: handle exception

}

}returnstus;

}

讲一下重点的地方    ResultSet rs=null;  这个对象存储的一个查询的结果集合。select * from stu这个返回的 应该是查询的学生表中每个学生的所有数据,

所以rs就可以储存这样的一个集合,然后通过遍历得到其中的数据,将数据赋值给一个学生对对象,将对象加入到集合中,就得到可表中所有的数据~

这次讲的主要是基础部分,等下次继续探讨JDBC联合其他的一些操作~

Class.forName("com.mysql.jdbc.Driver");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值