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表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。
[解决办法]你试试并发的情况会怎样?
[解决办法]
都不对,connection怎么能是static的呢
为什么不可以呢?
我这么用,倒是运行的很正常
你试试并发的情况会怎样?
方法一: 执行两次数据库操作,提交两次事务看看
方法二: 试试并发。(如果是写给桌面程序用的就不用试了)
[解决办法]确实如此,我就吃过这样的亏!
[解决办法]
方法一: 执行两次数据库操作,提交两次事务看看
方法二: 试试并发。(如果是写给桌面程序用的就不用试了)
我这个是J2EE,一个简单的菜单程序。
怎样测试这两种方法?
写个添加数据的页面 然后用loadrunner做压力测试。
[解决办法]
方法一: 执行两次数据库操作,提交两次事务看看
方法二: 试试并发。(如果是写给桌面程序用的就不用试了)
我这个是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被提交了,无法回滚。
[解决办法]
确实如此,我就吃过这样的亏!
请详细说说,我是菜鸟,要避免吃亏
其实我也是个棒槌,半道出家的,主要是大家多交流,相互学习,共同升大神.
1,这里且不说事务的问题,首先变量最好不要用全局的,例如:定义一个全局List,你再run了就昨得了。
2,connection要用连接池,你那例子表面上看是没有问题,但多线程测一下,你的程序就要报SQLException,因为你的连接资源只有一个,供不应求了。
还是多练多测就会发现问题。
祝各位中秋吃好,喝好,玩好。