JDBC连接数据库:
安装驱动的过程网上有较多文章可以参考。 驱动安装好之后:
步骤:
1.准备4个字符串
连接数据库需要4个字符串,以mysql 为例:
1.driverClass: com.mysql.jdbc.Driver
2.jdbcUrl: jdbc:mysql://localhost:3306/sb(最后一个代表你的数据库)
3.user:你的数据库账号
4.password:你的数据库密码
有两种方式:一种是硬编码的方式,即直接在代码里输入这4个字符串:
String driverClass="com.mysql.jdbc.Driver";
String jdbcURL="jdbc:mysql://localhost:3306/sb";
String user="root";
String password="abc123456";
还有一种就是采用配置文件的方式:jdbc.properties,然后读取该配置文件具体怎么读,另外一篇博客具体有写;
Properties p=new Properties();
InputStream ins=this.getClass().getClassLoader()
.getResourceAsStream("jdbc.properties");
p.load(ins);
driverClass=p.getProperty("driver");
jdbcURL=p.getProperty("jdbcUrl");
user=p.getProperty("user");
password=p.getProperty("password");
2.加载驱动:
Class.forName(driverClass);
3.建立与数据库的连接:
一个connection代表一个数据库连接,可以调用DriverManager的getConnection()方法建立与数据库的连接,DriverManager是驱动管理类,传入的jdbcURL,user,password不一样,建立的连接就不一样,很方便。
Connection connection= DriverManager.getConnection(jdbcURL,user,password);
好,建立好连接之后,就说明咱们已经完成了第一步,这时候你可以输出connection一下.整段代码:
但离咱们的CRUD操作还差几步:
<span style="white-space:pre"> </span>String driverClass=null;
String jdbcURL=null;
String user=null;
String password=null;
Properties p=new Properties();
InputStream ins=this.getClass().getClassLoader()
.getResourceAsStream("jdbc.properties");
p.load(ins);
driverClass=p.getProperty("driver");
jdbcURL=p.getProperty("jdbcUrl");
user=p.getProperty("user");
password=p.getProperty("password");
//2.加载数据库驱动
Class.forName(driverClass);
//3.获取数据库连接
Connection connection= DriverManager.getConnection(jdbcURL,user,password);<pre name="code" class="java"><span style="white-space:pre"> System.out.println(connection);
但离咱们的CRUD操作还差几步:
JDBC的CRUD操作:
首先,获取preparedStatement,调用其executeQuery()方法进行select 或者executeUpdate()方法进行insert,update,delete操作。这里要注意的是,查找操作和另外3种操作调用的方法不一样。
insert,ipdate,delete的操作:
获取preparedStatement对象:
String sql="INSERT INTO customer (NAME,email,birth) values('daming','1000@qq.com','2015-04-10')";<pre name="code" class="java">preparedStatement=connection.prepareStatement(sql);//需要传入sql语句<pre name="code" class="java">preparedStatement.executeUpdate();//执行前面输入的sql语句
这里要注意的是,在执行executeUpdate()方法的时候,不需要再次传入sql语句。执行完之后,就可以在你的数据库的表中看到多了一条数据。
update和delete操作和insert一样。具体的sql语句就需要大家自己去学数据库了。
当然,其实还有另外一种用法:获取statement,调用其executeQuery()方法或者executeUpdate()方法insert,update,delete操作。
<span style="white-space:pre"> </span>statement=connection.createStatement();
statement.executeUpdate(sql);
不一样的地方就是这里的statement执行executeUpdate方法的时候,需要传入sql语句。但statement有其局限性,即如果我们要写一个通用点的插入方法,即name和Email都靠键盘输入,如果继续用statement的话,其SQL语句:Scanner scanner=new Scanner(System.in);
String name=scanner.next();
String email=scanner.next();
sql="insert into customer (name,email) values"+
"('"+name+"','"+email+"')";
如果插入的属性值很多的话,靠拼接sql语句将很复杂,容易出错,且容易sql注入。此时,preparedStatement就发挥了它的长处:它可以用占位符来替代那些属性值,然后用setXxx方法来输入那些值。代码如下:
<span style="white-space:pre"> </span>String sql="INSERT INTO customer (NAME,email,birth) values(?,?,?)";
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1, "zhanglei");//替代占位符
preparedStatement.setString(2, "21321@qq.com");
preparedStatement.setDate(3, new Date(new java.util.Date().getTime()) );//sqlDate创建过程
preparedStatement.executeUpdate();
这样看去是不是方便多了呢,而且也能避免简单的sql注入。查询操作
对于查询操作,需要得到resultSet, 字面意思就是结果集。调用preparedStatement.executeQuery()将返回一个ResultSet集合。
简单来说,CRUD操作就差不多是以上这些了。需要注意的是,connection,preparedStatement和resultSet在用完之后都需要关闭,调用其.close()方法即可。
/*
* resultSet :封装了使用JDBC进行查询的结果
* 1.调用preparedStatement 对象的executeQuery()
* 返回的实际上就是一张数据表。有一个指针指向数据表的第一样的前面
* 可以调用next()方法检测下一行是否有效,若有效,返回TRUE,且指针下移,相当于
* Iterator 对象 hasNext()和next方法的结合体
* 当指针定位到一行时,可以通过调用getXxx(index)或getXxx(columnName)
* 获取每一列的值,例如getInt(1),getString("name")
* ResultSet也需要关闭
* */
String sql="select name,email,birth from customer where id = ?";<pre name="code" class="java">preparedStatement=connection.prepareStatement(sql);<pre name="code" class="java">preparedStatement.setInt(1, 7);//1表示第一个问号,7表示id=7<pre name="code" class="java">rs=preparedStatement.executeQuery();//获取resultset集<pre name="code" class="java">//4.处理ResultSet<pre name="code" class="java">if(rs.next()){//表示如果集合还有下一行<pre name="code" class="java">int id=rs.getInt(1);//第一列
String name=rs.getString("name");//得到name列对应的值,name 表示列名
String email=rs.getString("email");
Date birth=rs.getDate(4);
System.out.println(id);
System.out.println(name);
System.out.println(email);
System.out.println(birth);
}
简单来说,CRUD操作就差不多是以上这些了。需要注意的是,connection,preparedStatement和resultSet在用完之后都需要关闭,调用其.close()方法即可。
总结一下:1.先得到connection:调用DriverManager.getConnection(String url,String user,String
password);
2.得到preparedStatement,在这里需要注意的是,在得到它的同时,就需要传入SQL语句:
preparedStatement=connection.prepareStatement(sql);
3.如果是查询操作,就需要调用prepared.executeQuery()方法得到resultSet:
rs= preparedStatement.executeQuery();//获取resultset集<pre name="code" class="java">//4.处理ResultSet
if(rs.next()){
int id=rs.getInt(1);
String name=rs.getString("name");
String email=rs.getString("email");
Date birth=rs.getDate(4);
System.out.println(id);
System.out.println(name);
System.out.println(email);
System.out.println(birth);
}