---恢复内容开始---
我之前一直想在自己搭建的博客上记录自己的学习历程,由于知识的欠缺,这条路没了尽头最准决定注册一个博客,记录自己的学习历程,以便于以后复习,也可以通过博客和更多的人交流,共同进步。这也是我第一次写博客,有不足之处望指正。(之前学过的有关于Java的知识会后期补充上来)
MySql与JDBC
JDBC
a、JDBC(Java DataBase Connectivity): SUN公司提供的一种数据库访问规则、规范, 由于数据库种类较多,并且java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。 我们的java程序只要使用sun公司提供的jdbc驱动即可。
b、使用JDBC的基本步骤(掌握):
(1)注册驱动:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
View Code
(2)建立连接:
//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");(第一种方法)
conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");(第二种方法)
注:localhost:表示本机;
student:数据库名;
root依次为:用户名、密码
View Code
(3)创建statement:
st = conn.createStatement();
View Code
(4)执行sql 语句,得到ResultSet:
String sql = "select * from t_stu";
rs = st.executeQuery(sql);
注:t_stu为数据库中的表名
View Code
(5)遍历每一条记录:
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id="+id + "===name="+name+"==age="+age);
View Code
(6)释放内存:
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx) { } // ignore
rs = null;
}
View Code
完整代码实例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class demo2 {
/**
* @param args
*JDBC入门事例
*/
public static void main(String[] args) {
Connection conn =null;
Statement st = null;
ResultSet rs = null;
try {
//1、注册驱动
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());//在mysql4.0之后可以不用注册驱动
//2、建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "12345");
//3、声明Statement
st = conn.createStatement();
//4、创建ResultSet
String sql = "select * from info";
rs = st.executeQuery(sql);
//5、遍历结果
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id:"+id+"name:"+name+"age"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
//6、释放资源
if(rs !=null)
{
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st !=null)
{
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st !=null)
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
以上代码实现了java连接mysql数据库的功能,为了提高代码的复用性,需要对代码进行优化吗,生成一个工具类,减少代码冗余,方便以后调用。
优化后的代码:(该类对数据库的连接做了一个简单的封装)
package java_jdbc_util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;//注意导入的包
@SuppressWarnings("unused")
public class JdbcUtil {
static String driverClass = null;
static String url = null;
static String name = null;
static String passwd= null;
//创建静态代码块,当类加载完成时读取配置文件
static {
try {
Properties properties = new Properties();
//InputStream is = new FileInputStream("jdbc.properties");//当配置文件放在项目根目录时使用方法读取
//使用类加载器,去读取src底下的资源文件。
InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
try {
properties.load(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//读取属性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("username");
passwd = properties.getProperty("passwd");
} catch (Exception e) {
e.printStackTrace();
}
}
//创建连接数据库方法,返回Connection对象
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(driverClass);
//DriverManager.registerDriver(driverClass);//加载mysql驱动
conn = DriverManager.getConnection(url, name, passwd);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//对外提供一个public方法,调用三个私有方法
public static void relase(ResultSet rs,Connection conn,Statement st){
rsClose(rs);
stClose(st);
connClose(conn);
}
//方法重载
public static void relase(Connection conn,Statement st){
stClose(st);
connClose(conn);
}
//创建三个私有的方法,用于释放资源
private static void rsClose(ResultSet rs){
try{
if(rs != null)
{
rs.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
rs = null;
}
}
private static void stClose(Statement st){
try{
if(st != null)
{
st.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
st = null;
}
}
private static void connClose(Connection conn){
try{
if(conn != null)
{
conn.close();
}
}catch(Exception e){
e.printStackTrace();
}finally
{
conn = null;
}
}
}
View Code
调用封装的工具类连接数据库
package java_jdbc_connectivity;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java_jdbc_util.JdbcUtil;
public class demo1 {
/**
* @param args
* JDBC入门
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try
{
conn = JdbcUtil.getConn();
//3、创建staw,一定要创建这个对象
st = conn.createStatement();
//4、执行查询,得到结果
String sql = "select * from info";
rs = st.executeQuery(sql);
while(rs.next())
{
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id="+id+"==name="+name+"---age"+age);
}
}
catch(Exception e)
{
e.printStackTrace();//输出异常
}
finally{
JdbcUtil.relase(rs, conn, st);
}
}
}
View Code
配置文件XXX.properties中存放连接数据库的相关信息,如用户名、密码等,通过加载配置文件将这些信息加载到程序里,通过修改数据库名来连接不同的数据库,该配置文件可以存放在src或项目根目录下,对应有不同的加载方式