1. 程式人生 > >c3p0報空指標異常

c3p0報空指標異常

</pre><strong><span style="font-family:Comic Sans MS;font-size:18px;">今天建了個登入的小專案, 使用c3p0搭配DBUtil連線資料庫,然後使用測試類測試連線資料庫的方法可以連線,但是用servlet呼叫這個方法就報空指標異常.不知道是怎麼回事,估計問題很罕見,網上找半天也找不到出錯的原因.</span></strong><p><strong><span style="font-family:Comic Sans MS;font-size:18px;">部分原始碼是這樣的:</span></strong></p><p><pre name="code" class="java"><strong><span style="font-family:Comic Sans MS;font-size:18px;">//-------------這是連線資料庫的----------------
public class SimpleModule {
	private static DataSource ds;
	
	static {
		ds = new ComboPooledDataSource();
	}
	
	public void insertUser(User u) {
		String createUser = "insert into userinfo values(null,?,?)";
System.out.println("beforeQueryRunner");
		QueryRunner qr = new QueryRunner(ds);
		try {
			qr.update(createUser, u.getUsername(), u.getPassword());
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public User getUser(User u) {
		String getUser = "select * from userinfo where username=? and password=?";
System.out.println("beforeqr");
		QueryRunner qr = new QueryRunner(ds);
System.out.println(u);
		User user = null;
		try {
			user = qr.query(getUser, new BeanHandler<User>(User.class), u.getUsername(), u.getPassword());
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return user;
	}</span></strong>

在呼叫query方法時,u無論從測試類還是servlet傳過來都是有值的.就是執行query方法這一步出了錯,不知道為何.
<strong><span style="font-family:Comic Sans MS;font-size:18px;">//----這是servlet裡的呼叫getUser的方法---------------
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		String userName = request.getParameter("username");
		String password = request.getParameter("password");
		User u = new User();
		u.setUsername(userName);
		u.setPassword(password);
		
		SimpleModule sm = new SimpleModule();
		User user = sm.getUser(u);
}
//------這是測試類裡的方法------------------
	@Test
	public void getUserTest() {
		User u2 = new User();
		u2.setUsername("sdf");
		u2.setPassword("sdf");
		User user = sm.getUser(u2);
		if (user != null) {
			System.out.println(user);
		} else {
			System.out.println("null");
		}
	}</span></strong>

其實我認為,我寫的方法應該沒什麼錯,就是query方法的錯,還有就是可能我懶省事把模型層所有東西都寫在了一起所以出錯?
<strong><span style="font-family:Comic Sans MS;font-size:18px;">//---------這是報錯的資訊-------------------
五月 11, 2016 11:09:32 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource 
資訊: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> y6nvpz9g18hubuj2s97ws|db0359, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> null, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> y6nvpz9g18hubuj2s97ws|db0359, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> null, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
五月 11, 2016 11:10:02 下午 com.mchange.v2.resourcepool.BasicResourcePool 
警告: com
[email protected]
1239c31 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: java.lang.NullPointerException at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:524) at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:493) at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307) at java.sql.DriverManager.getDriver(DriverManager.java:262) at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285) at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:161) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:147) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:202) at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696) 五月 11, 2016 11:10:02 下午 com.mchange.v2.resourcepool.BasicResourcePool 警告: Having failed to acquire a resource, [email protected] is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.</span></strong>

慢慢分析報錯資訊吧...

------------------------更新 16/5/12-----------------------------------------

發現問題了, 測試類的c3p0配置是我配置檔案裡的配置,servlet配置是個莫名其妙的配置,大概是路徑不同吧

<span style="font-family:Comic Sans MS;">Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 2, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> y6nvpz9g18ju4qz18rkmtj|1424bf0, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> y6nvpz9g18ju4qz18rkmtj|1424bf0, idleConnectionTestPeriod -> 0, initialPoolSize -> 10, jdbcUrl -> jdbc:mysql://localhost:3306/mydata?useUnicode=true&characterEncoding=UTF-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 30, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]</span>
可是之前就是這樣寫的卻從未報過錯,今天用了過濾器和Listener,但是也不應該出這種問題啊,究竟怎麼改呢?
----------------------更新 16/5/13 21:19--------------------------------------
解決了:
出錯原因: 

前兩天懶省事想著把常用的jar包都放入Tomcat的lib資料夾下,就不用在專案中手動導包--
錯就出在這裡,c3p0讀取xml配置檔案指定是在classes資料夾下,我想把它的包放在Tomcat的lib下在執行時沒載入到配置檔案,所以才出這種錯大哭

解決方法:



再把c3p0的相關包匯入工程就好了...

總結:還是不能偷懶啊

(又改了改文章樣式...)

相關推薦

c3p0指標異常

</pre><strong><span style="font-family:Comic Sans MS;font-size:18px;">今天建了個登入的小專案, 使用c3p0搭配DBUtil連線資料庫,然後使用測試類測試連線資料庫的方

android studio 使用butterknife 指標 異常

  使用butterKnife 時,報錯。 在使用butterknife 8.0以上的版本是,出現空指標錯誤,記錄如下: 錯誤使用: 在寫一個Demo 的時候使用了ButterKnife ,是直接從android  studio 上面下載匯入的 jar 包

String.length()>1 指標異常

@Override public ExpertEntity getExpertById(Long id) { ExpertEntity Expert = ExpertMapper.getObjectById(id); if (Expert.getFilepath().length()>

為什麼simpleDateFormat.format(null)會指標異常

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.format(null); 在第二行會報空指標異常,為什麼呢? 我們進入原始碼看一下就知道了。 第一步 public final Stri

java碎片整理之Boolean變數和null的運算指標異常

  把Boolean變數的初始為null,在與其他Boolean變數運算時,有以下情況: 1、||運算時,如果Boolean變數值為true並且在左邊,變數值為null型別的在右邊,編譯不會報錯,執行時不會報空指標異常,會輸出左邊的Boolean變數值true,如果Boolean變數值

String.length()>1 指標異常

@Override public ExpertEntity getExpertById(Long id) { ExpertEntity Expert = ExpertMapper.getObjectById(id); if (Expert.getFilepath()

自建工具類引用service層或dao層介面指標異常解決辦法之一

問題描述:想要建一個工具類進行資料同步,其中要用到service層或dao層的資料查詢介面,正常構建工具類,用@Autowired註解匯入service層。在專案測試時報空指標異常,發現是service層介面注入失敗。 解決方法:將你的工具類變成spring容器:1.將

abp 使用OAuthBearerAuthenticationOptions物件裡屬性AccessTokenFormat對應的Protect方法指標異常解決方法

由於要自己要在自定義的service類定義一個和登陸相關的介面,所有需要模仿api下面的AccountController登陸並返回ticket,但是對應的AccessTokenFormat老是報空指標異常,下面說說我做的步驟以及解決方法。   abp原有Api解決方案下面的使用程

利用反射生成例項,例項內部Autowired的元件指標異常

今天在公司做一個介面以實現對mq佇列中拋異常的訊息進行訊息重發。程式碼如下: //前端傳的引數 String consumerName = "dispenseConsumer"; String methodName = methodName; String param =

例項化JFileChooser物件指標異常問題的解決辦法

極少部分人運氣不好可能遇到這樣一個問題。只要例項化JFileChooser物件就會報空指標異常; 就這一行程式碼出錯說明不是程式碼的問題,應該是JDK或者電腦許可權的問題。 這個小編能力有限,修復不了這個問題,但有另外的方法代替JFileChooser

ScrollView巢狀ListView,listItem.measure(0,0);指標異常NullPointerException

1: SrollView巢狀ListView時顯示不全問題及ListView高度問題: 直接上程式碼,使用以下函式解決此問題: public void setListViewHeightOnChildren(ListView listView) {

Spring自動裝配指標異常

這幾天在學Spring的自動裝配,自己動手做一個小專案,但是被一個空指標異常卡住了。 啟動的時候彈出index.jsp,這是一個登陸頁面: <%@ page language="java" contentType="text/html; charset

spring依賴注入,執行指標異常

java.lang.reflect.InvocationTargetException     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     sun.reflect.NativeMethod

關於向arrayList集合插入物件指標異常

當我在我帶程式碼裡向一個list集合新增物件時,報空指標異常了 最開始的時候我沒有判斷99行的order是否為空,直接向orderList.add(order);於是我加了一個判斷,判斷了order不等於空,但是執行程式還是報空指標,這時我發現應該是orderList出問題

eclipse 中Spring 使用@Autowired 指標異常

最近在學生Spring框架,這算是一個很低階的錯誤,寫出來希望不要有人犯和我一樣的錯誤,執行下面的例子時,使用了@autowired註釋,但是報出了空指標異常,例子程式如下: TextEditor SpellChecker MainApp: 執行後報了一個空指

當函式的引數為int型別 呼叫該函式是給該引數賦值null會指標異常nullpointexception

如:     service 裡面有一個 findById(int id)方法     從controller層呼叫findById()方法--》service.findById(null); 此時會

【Spring錯誤筆記系列】自己new出來的bean中被@Autowired註解修飾的屬性指標異常:java.lang.NullPointException

自己new出來的bean中被@Autowired註解修飾的屬性報空指標異常 異常描述 原本我再測試RabbitMQ的傳送程式,裡面用到了一個AmqpTemplate介面,用了@Autowired註解。但是當我使用AmqpTemplate的conver

主activity指標異常java.lang.RuntimeException: Unable to resume activity

主activity   報空指標異常 java.lang.RuntimeException: Unable to resume activity {com.click369.test/com.click369.test.jzactivity.TallyToolActivit

返回值為基本資料型別返回null指標異常

顯然,null並不能作為基本資料型別的值,int a = null;這句程式碼編譯都過不了,如果返回值為null的話就會嘗試將null強轉為基本資料型別,此時就會報空指標異常。但是對於其包裝型別就不存在這個問題了,給包裝型別返回null是合理的,因為Integer a = n

對 request.getParameter("引數名字") 獲取的值判指標異常

對   request.getParameter("引數名字") 獲取的值判空報空指標異常 比如 String  str=request.getParameter("引數名字"); str.equal(""); 執行報錯,空指標異常 因為此時 request.ge