JDBC连接数据库学习心得
1. 环境的搭建
首先在intelliJADE下新建工程,并且在工程根目录下创建lib包,lib包用于存放JDBC的jar包,以及以后其他工具jar包.将jar包存入并且导入环境配置后进行下一步
2.数据库连接mysql有两种方式
(1).通过在页面写数据库连接语句连接数据库.
优点:当你刚刚搭设好环境用于测试的情况下,这几句话非常方便.连接数据库的基本步骤与语句是JDBC的基础,后面的Util类里面的方法也是基于这个基础封装的.
缺点:如果你要进行项目开发,每一个需要对数据库进行操作的方法与类都需要写一遍,而且如果数据库的密码路径发生更改,需要每一个写了这些语句的地方都需要更改.费时费力容易出错.
(2).通过创建一个JdbcUtil类,将数据库连接与关闭的方法包装进去,并且将数据库的地址与账户信息,写到一个文本文件中,并用JdbcUtil类里的方法去读取与调用.
优点:1.在项目开发中,创建Util这个连接类之后,每次需要对数据库进行操作的时候,可以直接调用这个Util连接类,通过里面封装好的方法可以轻松对数据库进行访问,避免了大量的代码冗余,
2.如果数据库的路径与账户信息发生改变,只需要对文本文件进行改动即可,极大的方便了操作,也减少了出错的机会
3.符合java的封装思想
2.1简述JDBC连接数据库的两种方式
(1).在页面写数据库连接语句连接数据库
[1].注册驱动,由于驱动是分厂家的,有重复性的操作,推荐使用类对象
Class.forname("com.mysql.jdbc.Driver");
//上面这句话会将这个类先加载进内存,之后此类的静态代码块就会执行,在静态代码块中就已经有了注册驱动的代码
[2].建立连接并且获取连接对象
Connectionconn = DriverManager.getConnection(path);
path的三种写法
第一种:
path="jdbc:mysql://localhost:3306/jdbc?user=root&password=newpass"
localhost:3306为数据库的地址与端口号,如果是本地数据库那么默认用localhost,本地默认端口号3306.如果是网络上的数据库,比如Linux虚拟机里的则需要填写他们的ip地址例如:172.16.110.129
端口号/jdbc.此jdbc为数据库名称
?连接的是参数 &在参数与参数之间起到连接作用
user与password都是参数名
root与newpass都是参数值
如果数据库的编码不是utf8那么在通过Java代码去访问数据库进行增删改查的时候,需要传输汉字,那么在?后面应该加上编码规则?characterEncoding=UTF-8,这样数据库可以识别Java传过来的汉字
第二种:
path=""jdbc:mysql://localhost:3306/jdbc","root","newpass""
数据库的地址与登录的用户名和信息分别用双引号括起来进行区分,这样可以不用输入?和&也不用输入参数名,只需要输入账号和密码并且用双引号括起来即可.
第三种:
创建一个Properties对象用来存储参数,用户名和密码
Propertiesproperties = new Properties();
//以key-value的方式存储
properties.setProperty("user", "root");
properties.setProperty("password","newpass");
这样在DriverManger.getConnection()里面就需要写
("jdbc:mysql://数据库地址(localhost/网络ip):端口号(本机默认3306)/所选择的数据库名称")
[3].根据连接对象,获得Statement对象
Statementstmt = conn.creatStatement();
[4].由statement对象执行sql语句
例如:
statement.execute("CREATE TABLE stu("id INT PRIMARYKEY , name VARCHAR(50), age INT )");
ResultSet resultSet =stmt.executeQuery("SELECT * FROM stu;");
对于查询语句,需要使用executeQuery进行操作,以及需要调用ResultSet这个类去接收查询结果
//输出当前resultset指针所在位置
System.out.println(resultSet.getRow());
//next后的位置
resultSet.next();
//previous后的位置
resultSet.previous();
可以使用while循环遍历搜索结果
while (resultSet.next()) {
System.out.println("id:" + resultSet.getInt("id") +
" name:" + resultSet.getString("name") +
" age:" + resultSet.getInt("age"));
}
[5].对数据库进行操作之后要进行关闭流操作
conn.close;
stmt.close;
rs.close;
以上五个步骤为直接在类里创建数据库连接,并且进行了插入和查询两个步骤的完整方法
(2).通过创建JdbcUtil类对数据库进行连接
[1].创建一个类,类名是JdbcUtil,并且在src文件夹下创建Properties名字为jdbcfg
[2]打开JdbcUtil开始编写连接,创建静态代码块
//驱动类的路径
private static StringdriverClass=null;
//连接数据库使用的url
private static Stringurl = null;
//用户名和密码
private static Stringuser = null;
private static String password = null;
private static Connection conn = null;//提前声明是因为之后在catch还需要用到
static {
try {
ClassLoader cl = Jdbcutil.class.getClassLoader();
InputStream stream =cl.getResourceAsStream("jdbcfg.properties");
//得到流中的数据
//创建一个Properties对象
Propertiesprop = new Properties();
//通过Properties对象的Load方法,加载流中的数据
prop.load(stream);
//根据key,获得value
driverClass = prop.getProperty("driverClass");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//写一个静态方法,获取连接对象
public static Connection getConnection() throwsSQLException {
return DriverManager.getConnection(url,user,password);
}
//写一个静态方法,获得stmt对象
public static Statement getStatment() throwsSQLException {
conn = getConnection();
return conn.createStatement();
}
public static void release(){
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void release(Statementstmt){
release(stmt,null);
}
//写一个静态方法,用来释放资源
//如果想要释放Connection,需要调用Connection对象的close方法
//所以需要将Connection对象传入release方法,
//然后在release方法中调用该对象的close方法,
//释放资源
//statment对象与ResultSet对象同理
public staticvoid release( Statement stmt, ResultSet rs){
release();
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.2通过创建JdbcUtil类之后,以后的操作可以直接调用而不需要重新创建连接