Java学习日记番外篇:jdbc基础
来源:互联网 发布:淘宝网打底裙裤 编辑:程序博客网 时间:2024/05/29 02:15
声明:这篇文章主要内容大部分都是从林信良的《Java学习日记》这本书中摘录下来,仅作为个人学习参考用。
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
简单地说,用jdbc我们就能在Java程序中灵活的用数据库啦,把Java程序和数据库就能连起来啦。
链接数据库:
先要导入相应的驱动。。。就是一些jar包。。
- 普通项目:就在项目的根目录下新建一个文件夹,然后将需要的jar文件考进去,然后选择jar文件,右键。。选择build path。
- Web项目:在WEB-INF下的lib文件夹下导入相应的jar包。
在做完这些之后,
要取得数据库联机,必须有几个动作:
- 注册Driver对象;
- 取得Connection对象;
- 关闭Connection对象;
注册Driver对象
- 第一种方法:(很少用)
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
- 第二种方法:(用的比较多)
Class.forName("com.mysql.jdbc.Driver");
取得Connection对象:
在注册Driver对象之后,就要取得Connection对象了,可以这样取得:
Connection con = DriverManager.getConnection(jdbcURL, username, password);
括号中的:
jdbcURL:jdbc:mysql://主机名:端口/数据库名称?参数=值&参数=值jdbc:mysql://localhost:3306/demoUsername: rootPassword: 123456
也可以这样:jdbc:mysql://localhost:3306/demo?user=root&password=123456
事实上前面的这只是基本的,现在用javax.sql.DataSorse
得到数据库的链接比较多,后面会讲到。
Statement、ResultSet
上面都是数据库取得链接,现在取得链接之后,要执行SQL的话,就必须取得java.sql.Statement
对象。
可以用Connection
的createStatement()
来取得Statement
对象
Statement st = con.createStatement();
注意,这里导入的包是import java.sql.Statement;不要导入错啦~
这个Statement对象可以使用executeUpdate()/executeQuery()等方法来执行SQL。
- executeUpdate()主要用来执行CreateTable、Insert、DropTable、AlterTable等会改变数据库内容的SQL。
e.g.:
st.executeUpdate("create table jyk;");
这个方法会返回一个int结果,表示数据变动的笔数。
- executeQuery()方法主要用于Select等查询数据库的SQL语句。
st.executeQuery(“select * from jyk;”);
这个方法会返回java.sql.ResultSet
对象,代表查询结果。查询结果是一笔一笔的数据,可以使用ResultSet
的next()
方法移动到下一笔数据,这个next()
方法会返回true或者false,表示是否有下一笔数据。可以使用getXXX()
的方法取得数据。(例如getInt()
)
- 指定域名来取得数据:
ResultSet result = st.executeQuery("select * from jyk;"); while(result.next()) { String id = result.getInt("id"); String name = result.getString("name"); }
- 指定字段来取得数据:(注意字段是从1开始)
ResultSet result = st.executeQuery("select * from jyk;"); while(result.next()) { int id = result.getInt("1"); String name = result.getString("2"); }
完整的例子:
Class.forName("com.mysql.jdbc.Driver"); String jdbcURL="jdbc:mysql://localhost:3306/demo?user=root&password=123456"; Connection con = (Connection) DriverManager.getConnection(jdbcURL); Statement st = con.createStatement(); st.executeUpdate("create table jyk;"); ResultSet result = st.executeQuery("select * from jyk;"); while(result.next()) { int id = result.getInt("id"); String name = result.getString("name"); }
这里我并没有建立这个数据库,只是这样示范了一下,如果想要运行出结果,记得建立对应的数据库。
PreparedStatement、CallableStatement
使用Statement、ResultSet的时候会有一些不方便,也会有一些不安全。现在就可以使用预处理:PreparedStatement
。
PreparedStatement ps =con.prepareStatement("insert into jyk values(?,?)");
然后用setInt()
、setString()
等方法,指定上面有“?”
地方的数据。
ps.setInt(1, 001);ps.setString(2, "jjjyyykkk");
要让这句SQL生效,就要执行executeUpdate()
/executeQuery()
等方法。
ps.executeUpdate();
例子:
PreparedStatement ps =con.prepareStatement("insert into jyk values(?,?)"); ps.setInt(1, 001); ps.setString(2, "jjjyyykkk"); ps.executeUpdate();
注意:Java类型和SQL类型并不是完全对应,下面有一个表格:
使用DataSource取得联机:
使用C3p0连接池:
使用时记得导入相应的jar包。
C3p0例子:
public static ComboPooledDataSource ds=new ComboPooledDataSource();ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/iss"); ds.setUser("root"); ds.setPassword("mysql"); ds.setMaxPoolSize(20); ds.setInitialPoolSize(3); ds.setMinPoolSize(2);Connection cn=ds.getConnection(); System.out.println(cn); PreparedStatement ps=cn.prepareStatement("select * from emp where id>?"); ps.setInt(1, 3); ResultSet rs=ps.executeQuery();while(rs.next()) { System.out.println(rs.getInt("id")+"\t"+rs.getString("name")); }
其实我们也可以不用在这里配置连接池,因为在Java类中配置的话,但你想改变连接池的设置的时候,要重新加载连接池,所以我们可以吧连接池的配置写到一个properities文件里面,在这里叫c3p0.properities。
c3p0.properities
这个properities文件就放在src文件夹下就好啦
c3p0.driverClass=com.mysql.jdbc.Driverc3p0.user=rootc3p0.password=mysqlc3p0.jdbcUrl=jdbc:mysql://localhost:3306/issc3p0.initialPoolSize=3c3p0.maxPoolSize=5c3p0.minPoolSize=2
这样代码就变成了:
//ComboPooledDataSource的构造方法会在classpath下找c3p0.properties文件,并将此文件的属性值设置到ComboPooledDataSource对像对应的属性中 public static ComboPooledDataSource ds=new ComboPooledDataSource(); public static void main(String[] args)throws Exception { Connection cn=ds.getConnection(); System.out.println(cn); PreparedStatement ps=cn.prepareStatement("select * from emp where id>?"); ps.setInt(1, 3); ResultSet rs=ps.executeQuery(); while(rs.next()) { System.out.println(rs.getInt("id")+"\t"+rs.getString("name")); }
这样就能方便很多,也不容易出错。
具体的数据库用法在其他代码里多熟悉熟悉~
- Java学习日记番外篇:jdbc基础
- javaee学习日记之java基础之jdbc
- JAVA 学习日记(4).JDBC
- Java 基础学习日记
- 学习日记-java基础语法
- Java基础学习日记Day01
- Java基础学习日记Day02
- java基础学习之jdbc
- 黑马程序员java基础学习日记
- Java基础第二十天学习日记
- 黑马程序员学习日记--java编程基础
- 黑马Java基础学习日记1
- java基础学习日记——Map
- JAVA 学习日记(5).JSP,JDBC数据库查询
- JDBC学习日记之基础知识
- jsp servlet jdbc java基础学习
- java学习--数据库编程(JDBC基础概念)
- java jdbc学习整理一(基础)
- Android下ListView的学习
- R语言函数索引
- R语言读取文件数据
- Java NIO系列教程(二) Buffer
- R语言生成各种数据
- Java学习日记番外篇:jdbc基础
- 排序算法(一)--快速排序
- R语言正态性检验
- Android填坑之旅(第二篇) 关于Fragment中getActivity为Null的问题
- 【Java高级】ThreadPool用法与优势
- R语言画图
- R语言统计分析-方差分析
- MySQL innodb_buffer_pool 内存分配过程
- R语言函数索引-11月