(Java Database Conectivity)——Java数据库连接
1、工程的包
1.包的命名规则
com,公司名(项目名,具体模块的名称)实现分类的名称;
1.po包:存放的是Javabean类,每个Javabean类对应数据库中一张表,类名和表名一致;
2、dao包:存放的是操作数据类,即对数据库中的数据进行增删改查操作的类,每个dao包对应数据库中一张表,类名为——表名+dao;
3、util包:公用的类和常量;
4、测试类:存放的是测试类
2、数据库客服端操作数据库的步骤:
1.连接数据库(ip地址,端口号,用户名,密码,数据库名)
2.打开发送和执行sql语句的窗口
3.发送和执行sql语句
4.根据返回结果,判断是否正确操作了数据库
3、JDBC操作数据库的步骤:
1、连接到数据库
①、加载数据库的驱动:会抛出一个ClassNoFoundException异常;
mysql:Class.forName("com.mysql.jdbc.Driver");
②、利用驱动和三个参数(url、user、password)获取连接:会抛出一个SQLException异常;
java.sql.Connection conn=java.sal.DriverManager.getConnection(url、user、password);
mysql.String url="jdbc:mysql://127.0.0.1/databaseName"
oracle.String url=""
2、通过连接获得操纵数据的对象:会抛出一个SQLException异常;
java.sql.Statement st=conn.createStatement();
3、使用java.sql.Statement对象执行SQL语句:会抛出一个SQLException异常
执行更新SQL语句:int st=conn.createstatement();
执行查询sql语句:Java.sql.ResultSet rs =st.esecuteQuery(sql);
rows!=0 sql语句正确执行;
rs.next()=true 表示查出了子表
关闭rs:rs.close():会抛出一个SQLException异常
关闭st:st.close():会抛出一个SQLException异常
关闭conn:conn.close():会抛出一个SQLException异常
第一个jar包:数据库的驱动web工程的jar包都是放在WeRoot/WEB- INB/lib文件夹里
4、几个接口:
java.sql.Connection是一个接口;
java.sql.Statemrnt是一个接口;
java.sql.ResultSet是一个接口;java.sql.preparedstatement是一个接口;
从properties文件中解析出value值
InputStream is=DBConnectionUtil.class.getClassLoader().getResourceAsStream("database.properties");
Properties p =new Properties();
p.load(is);
String value=p.getProperty("name");
这个过程抛出IOException异常
6、java.sql.Statement和java.sql.properedStatement比较
① 、代码比较
1.SQL的写法:
Satement:String sql = "selete id from user where email =' "+email+" ' ";
PreparedStatement:String sql = "selete id from user where email = ?"
2.st/ps的获取:
Statement:st = con.createStatement();
PreparedStatement:ps = con.preparedStateme (sql);3.参数的设置:
Statement:在SQL中给出
PreparedStatement:ps.setType(1,value);
ps.setType(2,value);
4.执行SQL:
Statement:int rows = st.executeUpdate(sql);
re = st.executeQuery(sql);
PreparedStatement:int rows = ps.executeUpdate();re = ps.executeQuery();
②、sql入侵
Statement:可能发生sql入侵
PreparedStatement:不会发生sql入侵
③、效率比较
1、编译时间
Statement:st.executeUpdata(sql);编译并执行
PerparedStatement:ps=conn.prepareStatement (sql);获得就被编译(预编译)
Statement:稍高于PreparedStatement
PreparedStatement:稍低于Statement
7、PreparedStatement的优势:
1.防止SQL的注入,提高安全性
2.对参数实现类型的自动转换,代码的可读性,可维护性提高
8、单例模式
步骤:
①、私有化构造器:private Singlen(){}
singleton= new Singleton();
③、提供一个公共的static方法返回singleton:public
static Singleton getInstance(){
return singleton;
}
dao包里的DAO类是单例模式