(一),MySql数据库
1,MySql数据库的数据类型定义
2,完整性约束:
3,索引:
作用:唯一作用就是加快对表查询速度,索引通过快速路径方法访问来快速定位数据,从而减少磁盘的II/O;
缺点:维护浪费开销,存储需要一定的磁盘空间
4,数据库操作语言:
1,insert into tableName(column1,...) values(value1,...);
2,update tableName set(column1=value1...) where condition;
3,delete from tableName where condition
5,表与表之间的左外链接,右外链接,全链接,内链接区别
左外链接:保留两表所有匹配成功的的记录,和左表未匹配成功的记录,其右对应项为null;
右外链接:保留两表所有匹配成功的的记录,和右表未匹配成功的记录,其左对应项为null;
全链接:保留两表所有的的记录,不管是否匹配上,没匹配上对应项为null;
内链接:只保留链表匹配成功的记录数;
6,系统属性:
(二) JDBC操作
1,所需jar包,下载地址
2,简单的数据库JDBC操作:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class ExecuteDO { private String driver; private String url; private String user; private String pswd; //初始参数 public void initParam(String paraFile) throws FileNotFoundException, IOException{ Properties props=new Properties(); props.load(new FileInputStream(paraFile)); driver=props.getProperty("driver"); url=props.getProperty("url"); user=props.getProperty("user"); pswd=props.getProperty("pswd"); } //定义建表语言 public void createTable(String sql) throws ClassNotFoundException{ Class.forName(driver);//加载驱动 try { Connection conn=DriverManager.getConnection(url,user,pswd);//获取数据库连接 PreparedStatement stmt=conn.prepareStatement(sql);//创建状态对象,Prepared效率高些 stmt.executeUpdate();//执行更新数据库,创建表 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //插入表 public void insertTable(String sql) throws ClassNotFoundException{ Class.forName(driver); try { Connection conn=DriverManager.getConnection(url,user,pswd); PreparedStatement prst=conn.prepareStatement(sql); for(int i=0;i<5;i++){//循环插入5个值 prst.setString(1, "DD"+i);//设置第三列的数值,1代表第一个? prst.executeUpdate(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //查询结果 public void queryTable(String sql) throws ClassNotFoundException{ Class.forName(driver); try { Connection conn=DriverManager.getConnection(url,user,pswd); PreparedStatement stat=conn.prepareStatement(sql); ResultSet reset=stat.executeQuery(); while(reset.next()) System.out.println(reset.getInt(1)+" "+reset.getString(2)+" " +reset.getString(3)); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) throws Exception, IOException{ ExecuteDO ed=new ExecuteDO(); //新建属性文件 Properties props=new Properties(); props.setProperty("url", "jdbc:mysql://localhost:3306/javatest"); props.setProperty("driver", "com.mysql.jdbc.Driver"); props.setProperty("user", "root"); props.setProperty("pswd", "123"); props.store(new FileOutputStream("mysql.ini"),"commen Lins"); ed.initParam("mysql.ini"); //测试建表功能,DDL ed.createTable("create table jdbc_test(jdbc_id int auto_increment primary key,"+"jdb_name varchar(255),jdbc_desc text);"); //测试插入表结果:DML ed.insertTable("Insert into jdbc_test(jdb_name,jdbc_desc) values('rr',?)"); //测试查询表结果:DML功能 ed.queryTable("select * from jdbc_test"); System.out.println("ok!!"); } }
PrepareStatement和Statement区别:
1,PrepareStatement可以提高代码的可读性
2,ParperStatement提高了代码的灵活性和执行效率。
3,ParperStatement安全性更强些。
(三)事务操作
1,事务的特点
2,Connection类控制事务有:setAutoCommit()//是否自动提交;commit()//提交事务 rollback():撤销事务;查看这里
(四)使用数据库连接池操作:
c3p0 jar包:优点时:可以自己清理不再使用的Connection,Statement,ResultSet 资源下载地址
第一种连接方式(纯代码):
import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Cp3Test { private static Connection conn; private static ComboPooledDataSource ds = new ComboPooledDataSource(); public static Connection getConnection() { try { ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true"); ds.setUser("root"); ds.setPassword("123"); conn = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } catch (PropertyVetoException e) { e.printStackTrace(); } return conn; } public static void main(String[] args){ try { PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test"); ResultSet rs=pstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+" "+rs.getString(2)+" " +rs.getString(3)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
第二种方式:通过在src目录下建立名为"c3p0-config.xml”的xml文件
xml文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <c3p0-config> <default-config> <property name="jdbcUrl"> <![CDATA[ jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true ]]> </property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">123</property> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> <property name="acquireIncrement">3</property> <!-- 初始化数据库连接池时连接的数量 --> <property name="initialPoolSize">10</property> <!-- 数据库连接池中的最小的数据库连接数 --> <property name="minPoolSize">2</property> <!-- 数据库连接池中的最大的数据库连接数 --> <property name="maxPoolSize">10</property> </default-config> </c3p0-config>
调用方式如下:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Cp3Test { private static Connection conn; private static ComboPooledDataSource ds = new ComboPooledDataSource(); public static Connection getConnection() { try { conn = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void main(String[] args){ try { PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test"); ResultSet rs=pstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+" "+rs.getString(2)+" " +rs.getString(3)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }