1、JDBC连接数据库
建立oracle连接:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn= DriverManager.getConnection( "jdbc:oracle:thin:@192.168.8.8:1521:orcl","scott", "admin");
建立sqlserver连接:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=testdb3","sa", "sa");
建立mysql连接:
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://192.168.8.8:3306/mytest","root","jiafeng");
注意:加载驱动的方式还有
DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());
和
System.setProperty("jdbc.drivers", "oracle.jdbc.driver.OracleDriver");
可以加载多个驱动到内存中。
2、执行sql语句:
Statement类提供了执行sql语句的方法,每次执行SQL 语句时都将该语句传给数据库这样当执行多次相同的sql语句时效率较低。
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from emp");
PreparedStatement类是 Statement的一个子类该类提供了预编译要执行的语句的功能,该类还可以接收参数在执行。
如:PreparedStatement ps = conn.prepareStatement("select * from emp");
ResultSet rs = ps.executeQuery();
接收参数
PreparedStatement ps=conn.prepareStatement("select * from emp where sal<=?");
ps.setDouble(1,3000);
ResultSet rs=ps.executeQuery();
执行存储过程:
通过连接调用conn.prepareCall(sql);获得一个CallableStatement 对象执行存储过程,
String sql="{call p(?,?,?)}";创建调用存储过程的sql语句(该存储过程有两个输入参数一个输出参数)
CallableStatementcs=conn.prepareCall(sql);
cs.registerOutParameter(3,Types.INTEGER);//注册一个输出参数
cs.setInt(1, 4); 设置存储过程的第一个参数
cs.setInt(2, 5); 设置存储过程的第二个参数
cs.execute();//可以执行各种sql语句
int n=cs.getInt(3); 获得存储过程的输出参数
System.out.println(n);
执行sql语句可以返回最后一次插入的记录中自动生成的主键
String sql="insert into users values(10,'han','chao',33)";
//这里要是插入语句。
PreparedStatementps=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.executeUpdate();
ResultSetrs=ps.getGeneratedKeys();//获得自动生成的主键的结果集
while (rs.next())
{
System.out.println(rs.getString(1));
}
3、Transactions事务处理:
可以用Connection 接口的getAutocommit() 方法,检验数据库的目前自动提交模式设置。
用方法con.setAutoCommit(false) 方法关闭自动提交模式。
用con.commit() 命令提交事务
用con.rollback() 回滚一个事务
数据的批处理
String sql="insert into emp(empno,ename,sal) values(?,?,?)";
PreparedStatement ps =conn.prepareStatement(sql);
for (int i = 0; i < 100; i++)
{
ps.setInt(1, 1000 + i);
ps.setString(2, "jia" + i);
ps.setDouble(3, 2000.0 + i);
ps.addBatch();//将每条语句放到一起打包执行。
}
int[] n =ps.executeBatch();//返回每条语句的执行结果
4、关闭连接
conn.close();
5、配置连接池
通过添加%Tomcat_Home%/conf/server.xml 文件
全局的连接池
<Resourcename="jdbc/oracle"
type="javax.sql.DataSource"
username="scott"
password="tiger"
driverClassName="oracle.jdbc.driver.OracleDriver"
initialSize="1"
maxIdle="2"
maxWait="5000"
validationQuery="select 1 from dual"
url="jdbc:oracle:thin:@192.168.8.145:1521:orcl"
maxActive="4" />
并在tomcat的Context.xml中 <Context>下配置
<ResourceLink global="jiafeng" name="jiafeng"type="javax.sql.DataSource"/>
局部连接池
在项目的WebRoot下的META-INF下新建context.xml文件,在该文件中添加
<?xml version='1.0'encoding='utf-8'?>
<Context>
<Resource name="jiafeng"
type="javax.sql.DataSource"
username="scott"
password="admin"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxIdle="2"
maxWait="5000"
validationQuery="select 1 from dual"
url="jdbc:oracle:thin:@192.168.8.8:1521:orcl"
maxActive="4" />
</Context>
配置过连接池之后
把数据库的驱动包放到tomcat的lib目录下
添加项目中web.xml文件
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jiafeng</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
之后就可以在程序中获得连接
Context ct=new InitialContext();
DataSourceds=(DataSource)ct.lookup("java:comp/env/jiafeng");
conn=ds.getConnection();
再把驱动.jar包放到tomcat目录下lib文件夹中
数据库中使用的日期时 java.sql包中,而我们传进来的是java.util包中的,sql包中的Date继承与util包中的Date所以我们要把传进来的日期加到数据库中需要转型。
1.首先由util包中的Date得到毫秒数:date.getTime();
2.用该毫秒数构造sql包中的日期:new Date(long date);
3.将得到的sql包中的日期加进sql语句存入数据库。
Sql包中的Date类的toString方法做了格式化日期转义形式 yyyy-mm-dd 的日期
我们从数据库中得到日期直接可以赋给util包中的Date但是这样我们得到的日期就只是 yyyy-mm-dd 格式,所以
我们可以反过来先把sql包中的日期转换成毫秒数,在重新构造util包中的Date对象。
6.Hibernate使用连接池
<session-factoryname="foo">
<propertyname="connection.datasource">java:comp/env/jdbc/sa</property><!--指定tomcat连接池-->
<propertyname="show_sql">true</property> <!--是否显示sql-->
<propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property><!--hibernate的驱动管理器-->
<mappingresource="com/accp/t15/Customer.hbm.xml"/>
</session-factory>