博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net转Java自学之路—基础巩固篇三十(JDBC)
阅读量:6230 次
发布时间:2019-06-21

本文共 6518 字,大约阅读时间需要 21 分钟。

JDBC:Java数据库连接

  JDBC的四大配置参数:

    dirverClassName:com.mysql.jdbc.Dirver

    url:jdbc:mysql://localhost:3306/数据库名称

    username:数据库用户名

    password:数据库密码

  各大数据库的dirverClassName与url:

    mysql:

      >dirverClassName:com.mysql.jdbc.Dirver

      >url:jdbc:mysql://localhost:3306/数据库名称

    mssql:

      >dirverClassName:com.microsoft.jdbc.sqlserver.SQLServerDriver

      >url:jdbc:sqlserver://127.0.0.1:1433;DatabaseName=数据库名

    orcale:

      >dirverClassName:oraccle.jdbc.dirver.OracleDriver

      >url:jdbc:oracle:thin:@localhost:1521:数据库名称

    access:

      >dirverClassName:sum.jdbc.odbc.JdbcOdbcDriver

      >url:jdbc:odbc:driver=(Microsoft Access Driver (*.mdb);DBQ=mdb\\mydb.mdb)

  Connection:

Class.forName(dirverClassName);Connection conn=DirverManager.getConnection(url,username,password);

  Statement:

Statement stmt=conn.createStatement();int index=stmt.executeUpdate(sql);//增、删、改ResultSet rs=stmt.executeQuery(sql);//查boolean isTrue=stmt.execute(sql);//增、删、改、查

    Statement批处理:

      addBatch();//批添加

      executeBatch();//执行批

    在MySql中的批处理默认是关闭状态,要在配置参数url中添加参数:rewriteBatchedStatements=true 来开启MySql的批处理。如下:

    url:jbdc:mysql://localhost:3306/数据库名?rewriteBatchedStatements=true

  ResultSet:

    表示结果集。

    ResultSet提供了一系列的方法移动游标:

void beforeFirst();//把光标放到第一行的前面,默认位置。void afterLast();//最后一行后面boolean first();//第一行,返回值表示调控光标是否成功boolean last();//最后一行boolean isBeforeFirst();//是否再第一行前面boolean isAfterLast();//是否再最后一行后面boolean isFirst();//是否在第一行boolean isLast();//是否在最后一行boolean previous();//上挪一行boolean next();//下挪一行boolean relative(int);//相对位移。正数:下移n行。负数:上移n行boolean absolute(int);//绝对位移。把光标移动到指定的行上int getRow();//获取当前光标所有行int getMetaData().getColumnCount();//获取结果集列数String getMetaData().getColumnName(int);//获取指定列字段名称ResultSetmetaData getMetaData();//获取结果集元数据int getColumnCount();//获取结果集列数String getColumnName(int);//获取指定列字段名称

    ResultSet提供的一系列获取列数据的方法:

String getString(int);//获取指定列的String类型数据int getInt(int);//获取指定列的int类型数据double getDouble(int);//获取指定列的double类型数据boolean getBoolean(int);//获取指定列的boolean类型的数据Object getObject(int);//获取指定列的Object类型数据 ......

    ResultSet提供的通过列名称获取数据的方法:

String getString(String);int getInt(String);double getDouble(String);boolean getBoolean(String);Object getObject(String);......

  PreparedStatement:

    是Statement的子接口。防sql攻击;提高可读、可维护性;提高效率。

String sql="select * from t_tbable where column1=? and column2=?";PreparedStatement pstmt=conn.prepareStatement(sql);pstmt.setString(1,value1);//给第一个参数(问号)赋值,值为value1pstmt.setString(2,value2);//给第二个参数赋值,值为value2ReusltSet rs=pstmt.executeQuery();

  时间类型:

    数据库类型与Java中类型的对应关系:

      java.util.Date >> java.sql.Date

      java.util.Time >> java.sql.Time

      java.util.Timestamp >> java.sql.Timestamp

    领域对象(domain)中的所有属性不能出现java.sql包下的东西。即不能使用java.sql.Date

    时间类型转换:

      java.util.Date >> java.sql.Date、Time、Timestamp

        把util的Date转换成毫秒值;使用毫秒值创建sql的Date

      java.sql.Date、Time、Timestamp >> java.util.Date

        该转换不需要处理;因为java.sql.Date是java.util.Date的子类。

java.util.Date date=new java.util.Date();long ltime=date.getTime();java.sql.Date sqlDate=new java.sql.Date(ltime);

事物:

  四大特性(ACID)

    原子性(Atomicity):事物中所有操作时不可再分隔的原子单位。事物中的所有操作要么全部执行成功,要么全部执行失败。

    一致性(Consistency):事物执行后,数据库状态与其他业务规则保持一致。

    隔离性(Isolation):指在并发操作中,不同事物之间应该隔离开来,使每个并发中的事物不会相互干扰。

    持久性(Durability):一旦事物提交成功,事物中所有的数据操作都必须被持久化到数据库中,即使提交事物中数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

  MySql中处理事物:

    开启事物:start transaction

    结束事物:commit(提交)或  rollback(回滚)

  JDBC中处理事物:

    在JDBC中处理事物,都是通过Connection来完成。同一事物中所有的操作,都在使用同一个Connection对象。

    Connection的三个与事物有关的方法:

      setAutoCommit(boolean):设置是否为自动提交事物,true(默认):自动提交;也就是每条执行的sql语句都是一个的单独的事物。false:相当于开启事物。

      commit();提交。

      rollback();回滚。

  三种并发事物问题:

    脏读:读到另一个事物的未提交数据。

    不可重复度:对同一记录的俩次读取不一致,因为另一事物对该记录做了修改。

    幻读(虚度):对同一张表的俩次查询不一致,因为另一事物进行了插入数据的操作。

  四大隔离级别:

    不同事物隔离级别能够解决的数据并发问题的能力是不同的。

    SERIALIZABLE(串行化):

      不会出现任何并发问题,因为它是对同一数据的访问是串行的,非并发访问的。

      性能差

    REPEATABLE READ(可重复读;MySql):

      防止脏读和不可重复读,不能处理幻读问题。

      性能比 SERIALIZABLE 好。

    READ COMMITTED(读已提交数据;Oracle):

      防止脏读,没有处理不可重复读,也没有处理幻读。

      性能比 REPEATABLE READ 好。

    READ UNCOMMITTED(读未提交数据):

      可能出现任何事物并发问题。

      性能最好。

    MySql的默认级别为 REPEATABLE READ

    select @@tx_isolation  默认隔离级别查看语句。

    set  transaction  isolationlevel[4选1]  设置隔离级别。

  JDBC设置隔离级别:

    com.setTransactionIsolation(int);

    参数选值如下:

      Connection.TRANSACTION_READ_UNCOMMITTED;

      Connection.TRANSACTION_READ_COMMITTED;
      Connection.TRANSACTION_REPEATABLE_READ
      Connection.TRANSACTION_SERIAUZABLE;

数据连接池 简述:

  连接池也是要使用四大连接参数来完成创建连接对象。连接池必须实现:javax.sql.DataSource接口。连接池返回的Connection对象,它的close()方法与众不同。调用它的close()不是关闭,而是把连接归还给池。

  DBCP连接池:

BasicDataSource dataSource=new BasicDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Dirver");dataSource.setUrl("jdbc:mysql://locahost:3306/数据库名称");dataSource.setUsername(uname);dataSource.setPassword(pwd);dataSource.setMaxActive(int);//最大活动连接dataSource.setMinIdle(int);//最小空闲连接dataSource.setMaxWait(long);//最大等待时间Connection conn=dataSource.getConnection();//得到连接对象

装饰者模式 简述:

  对象增强手段:

    继承:被增强的对象固定。增强的内容也固定。

    装饰者模式:被增强的对象可以切换。增强的内容固定。

    动态代理(AOP):被增强的对象可以切换。增强的内容可以切换。

  为避免继承所造成的类的增多。需使用装饰者模式。

  当A、B、C三个类都有一个父类O时,O a=new A(); O b=new B(a);这种被称为是对进行装饰。是你、有你、一切都靠你

class B excutes A{    private A a;    public B(A a){        this.a=a;    }    public void method(){        //Code...    }}

  C3P0连接池 简述:

    ComboPooledDataSource

ComboPooledDataSource cpds=new ComboPooledDataSource();cpds.setDriverClass("com.mysql.jdbc.Dirver");cpds.setJdbcUrl("jdbc:mysql://localhost:3306/数据库名称");cpds.setUser("");cpds.setPassword("");cpds.AcquireIncrement(int);//增量cpds.setInitialPoolSize(int);cpds.setMinPoolSize(int);cpds.setMaxPoolSize(int); Connection conn=cpds.getConnection();

    配置文件:

      C3P0的配置文件必须在src目录下,名称必须是:c3p0-config.xml

Tomcat配置JNDI资源:

  JNDI:Java Naming and Directory Interface,Java命名和目录接口。

  作用:在服务器上配置资源,然后通过同一的方式来获取配置的资源。

  name:指定资源名称。

  factory:资源由谁负责创建

  type:资源类型

  该三个属性必须配置。其他的属性都是资源的参数。

 

//获取资源://创建JNDI的上下文对象Context ct=new InitialContext();//查询出入口Context enCt=(Context) ct.lookup("java:comp/env");//进行二次查询,找到配置的资源//参数是使用的是名称与
元素的name对应值DataSource ds=(DataSource)enCt.lookup("");Connection conn=ds.getConnection();

  ThreadLocal:类中由三个方法,set()、get()、remove()。

转载于:https://www.cnblogs.com/zltao/p/10429717.html

你可能感兴趣的文章
setTimeout,setInterval你不知道的事
查看>>
Linux系统安装_Centos6.9
查看>>
RX系列一 | ReactiveX根源 | 观察者模式分析
查看>>
一些C++11语言新特性 - Uniform Initialization
查看>>
Redis高级实践之————Redis短连接性能优化
查看>>
CentOS 6.5 安装nginx 1.6.3
查看>>
48.3. 设置Apache实现防盗连
查看>>
项目管理、测试管理、代码bug 管理
查看>>
SAP物料主档关键栏位解释
查看>>
Nim教程【十二】
查看>>
第 30 章 Shell Terminal
查看>>
Data Guard实现故障自动切换(二)(r11笔记第39天)
查看>>
[20171211]ora-16014 11g.txt
查看>>
oracle的正则表达式
查看>>
这几天的两件趣事
查看>>
小块头大作用 新型低成本测距传感器适用于无人机
查看>>
VSTO之旅系列(五):创建Outlook解决方案
查看>>
[erlang] mnesia
查看>>
php编码
查看>>
Java使用Socket传输文件遇到的问题(转)
查看>>