首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

JDBC: 两种方法,哪个对?解决办法

2013-10-05 
JDBC:两种方法,哪个对?本帖最后由 u011405885 于 2013-09-17 03:46:06 编辑方法1:public class Connection

JDBC: 两种方法,哪个对?
本帖最后由 u011405885 于 2013-09-17 03:46:06 编辑  

方法1:



public class ConnectionProvider {

static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static String DBURL = "jdbc:mysql://localhost:3306/recipe";
static String USERNAME = "root";
static String PW = "poiu0000";

public static Connection connection = null;

static {
try {
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
System.out.println("Where is Driver?");
e.printStackTrace();
// return null;
}
System.out.println("Registered!");

try {
connection = DriverManager.getConnection(DBURL, USERNAME, PW);
System.out.println("Connected!!!");
} catch (SQLException ee) {
System.out.println("Connection Failed! ");
ee.printStackTrace();
// return null;
}
}

public static Connection getConnection() {
return connection;
}
}


[解决办法]
都不对,connection怎么能是static的呢
[解决办法]
两种都不对。放在static中的变量都只初始化一次。驱动只需加载一次。所以驱动放在static中。

public class ConnectionProvider {
 
    static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static String DBURL = "jdbc:mysql://localhost:3306/recipe";
    static String USERNAME = "root";
    static String PW = "poiu0000";
 
    public static Connection connection = null;
 
    static {
        try {
            Class.forName(JDBC_DRIVER);
        } catch (ClassNotFoundException e) {
            System.out.println("Where is Driver?");
            e.printStackTrace();
            // return null;
        }
        System.out.println("Registered!");
    }
        
 
    public static Connection getConnection() {
        try {
            connection = DriverManager.getConnection(DBURL, USERNAME, PW);
            System.out.println("Connected!!!");
        } catch (SQLException ee) {
            System.out.println("Connection Failed! ");
            ee.printStackTrace();
            // return null;
        }
        return connection;
    }
}

[解决办法]
引用:
两种都不对。放在static中的变量都只初始化一次。驱动只需加载一次。所以驱动放在static中。

public class ConnectionProvider {
 
    static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static String DBURL = "jdbc:mysql://localhost:3306/recipe";
    static String USERNAME = "root";
    static String PW = "poiu0000";
 
    public Connection connection = null; //一下没注意!这个不能是static!
 
    static {
        try {
            Class.forName(JDBC_DRIVER);
        } catch (ClassNotFoundException e) {
            System.out.println("Where is Driver?");
            e.printStackTrace();
            // return null;


        }
        System.out.println("Registered!");
    }
        
 
    public static Connection getConnection() {
        try {
            connection = DriverManager.getConnection(DBURL, USERNAME, PW);
            System.out.println("Connected!!!");
        } catch (SQLException ee) {
            System.out.println("Connection Failed! ");
            ee.printStackTrace();
            // return null;
        }
        return connection;
    }
}


刚才没注意那个static,谢楼上。
[解决办法]
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 

用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。 
[解决办法]
引用:
Quote: 引用:

都不对,connection怎么能是static的呢




 为什么不可以呢?

我这么用,倒是运行的很正常


你试试并发的情况会怎样?
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

都不对,connection怎么能是static的呢




 为什么不可以呢?

我这么用,倒是运行的很正常


你试试并发的情况会怎样?


方法一: 执行两次数据库操作,提交两次事务看看

方法二: 试试并发。(如果是写给桌面程序用的就不用试了)
[解决办法]
确实如此,我就吃过这样的亏!
[解决办法]
引用:
Quote: 引用:

 
方法一: 执行两次数据库操作,提交两次事务看看

方法二: 试试并发。(如果是写给桌面程序用的就不用试了)



 我这个是J2EE,一个简单的菜单程序。

怎样测试这两种方法?


写个添加数据的页面 然后用loadrunner做压力测试。
[解决办法]
引用:
Quote: 引用:

 
方法一: 执行两次数据库操作,提交两次事务看看

方法二: 试试并发。(如果是写给桌面程序用的就不用试了)



 我这个是J2EE,一个简单的菜单程序。

怎样测试这两种方法?


或者用两个线程来模拟一下 下面这种情况。

比如说有A,B两个业务模块,对应的事物操作分别是
A: a1,a2,a3.
B:  b1,b2,b3.

先执行A事物,在A事物执行的过程中B请求到达,开始B的事物,例如:

A: --------- a1 --------- a2-----------a3----commit
B:----------------------------------b1-----------------b2-----发生异常,rollback 
这时你会发现b1被提交了,无法回滚。

 
       

[解决办法]
引用:
Quote: 引用:

确实如此,我就吃过这样的亏!


 请详细说说,我是菜鸟,要避免吃亏


其实我也是个棒槌,半道出家的,主要是大家多交流,相互学习,共同升大神.
1,这里且不说事务的问题,首先变量最好不要用全局的,例如:定义一个全局List,你再run了就昨得了。
2,connection要用连接池,你那例子表面上看是没有问题,但多线程测一下,你的程序就要报SQLException,因为你的连接资源只有一个,供不应求了。
还是多练多测就会发现问题。
祝各位中秋吃好,喝好,玩好。

热点排行
Bad Request.