问题出现在DBUtil.java 21行:
conn = DriverManager.getConnection(Consts.DB_URL, Consts.DB_USER, Consts.DB_PASSWORD);
mysql版本5.5.38
jar包:
libs/mysql-connector-java-5.1.39-bin.jar
真机调试,华为P20 Pro
尝试过本地数据库和云数据库都报同样的异常
public final static String DB_URL="jdbc:mysql://localhost:3306/asdb_ali";
public final static String DB_USER="root";
public final static String DB_PASSWORD="123456";
public class DBUtil {
private static final String TAG="DBUtil";
private static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
public static HashMap<String, String> getUserByUsername(String username) {
Connection conn = null;
Statement st = null;
HashMap<String, String> map = new HashMap<>();
try {
Class.forName(JDBC_DRIVER);
Log.i("**********************","TEST_1");
conn = DriverManager.getConnection(Consts.DB_URL, Consts.DB_USER, Consts.DB_PASSWORD);
Log.i("**********************","TEST_2");
st = conn.createStatement();
Log.i("**********************","TEST_3");
String sql = "select * from t_user where username = \"" + username + "\"";
System.out.println("SQL:::::::::::::::::::" + sql);
ResultSet res = st.executeQuery(sql);
if (res == null) {
return null;
} else {
int cnt = res.getMetaData().getColumnCount();
res.next();
for (int i = 1; i <= cnt; ++i) {
String field = res.getMetaData().getColumnName(i);
map.put(field, res.getString(field));
}
res.close();
st.close();
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, " 数据操作异常");
}finally{
// 关闭资源
try{
if(st!=null) st.close();
}catch(SQLException se2){
}// 什么都不做
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
return map;
}
}
报一以下异常:
I/**********************: TEST_1
W/System.err: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
W/System.err: at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2330)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
W/System.err: at com.biyesheji.as.utils.DBUtil.getUserByUsername(DBUtil.java:21)
at com.biyesheji.as.MainActivity$OnClick.onClick(MainActivity.java:83)
at android.view.View.performClick(View.java:7192)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
at android.view.View.performClickInternal(View.java:7166)
at android.view.View.access$3500(View.java:824)
at android.view.View$PerformClick.run(View.java:27592)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565)
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
at java.net.InetAddress.getAllByName(InetAddress.java:1152)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251)
W/System.err: at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
... 24 more
D/DBUtil: 数据操作异常
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer: disableOutlineDraw is true
I/HwViewRootImpl: removeInvalidNode jank list is null
W/libEGL: EGLNativeWindowType 0x7b3de26010 disconnect failed
W/libEGL: EGLNativeWindowType 0x7b3de28950 disconnect failed
V/ActivityThread: Handle window ActivityRecord{60d72c7 token=android.os.BinderProxy@4b2c599 {com.biyesheji.as/com.biyesheji.as.MainActivity}} visibility: false
D/ZrHung.AppEyeUiProbe: not watching, wait.
升级jar包到8.0.24,url: jdbc:mysql://localhost:3306/asdb_ali?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
JDBC_DRIVER="com.mysql.cj.jdbc.Driver"
后出现了以下异常:
V/AudioManager: querySoundEffectsEnabled...
I/**********************: TEST_1
W/System.err: java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1006)
W/System.err: at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:453)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at com.biyesheji.as.utils.DBUtil.getUserByUsername(DBUtil.java:21)
at com.biyesheji.as.MainActivity$OnClick.onClick(MainActivity.java:83)
at android.view.View.performClick(View.java:7192)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
at android.view.View.performClickInternal(View.java:7166)
at android.view.View.access$3500(View.java:824)
W/System.err: at android.view.View$PerformClick.run(View.java:27592)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565)
W/System.err: at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
at java.net.InetAddress.getAllByName(InetAddress.java:1152)
at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:132)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
at com.mysql.cj.NativeSession.connect(NativeSession.java:144)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:953)
... 20 more
D/DBUtil: 数据操作异常
I/HwViewRootImpl: removeInvalidNode all the node in jank list is out of time
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer: disableOutlineDraw is true
W/libEGL: EGLNativeWindowType 0x7ac67f6790 disconnect failed
之后把jar包换成5.1.48版本的,仍报异常,不知道是不是前面还有哪些地方的错误引起的异常,导致数据库连接引起了异常,现将日志完整贴上(在此非常感谢各位热心的dalao):
05/10 09:58:42: Launching 'app' on Physical Device.
App restart successful without requiring a re-install.
$ adb shell am start -n "com.biyesheji.as/com.biyesheji.as.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 28871 on device 'huawei-clt_al00-2SY7N18B08119400'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
D/ActivityThread: Attach thread to application
W/ActivityThread: Application com.biyesheji.as can be debugged on port 8100...
I/om.biyesheji.a: QarthPatchMonintor::Init
QarthPatchMonintor::StartWatch
I/om.biyesheji.a: QarthPatchMonintor::WatchPackage: /data/hotpatch/fwkhotpatch/
QarthPatchMonintor::CheckAndWatchPatch: /data/hotpatch/fwkhotpatch/com.biyesheji.as
QarthPatchMonintor::CheckAndWatchPatch: /data/hotpatch/fwkhotpatch/all
QarthPatchMonintor::Run
I/om.biyesheji.a: QarthPatchMonintor::Reading
QarthPatchMonintor::CheckNotifyEvent
QarthPatchMonintor::CheckNotifyEvent before read
I/HwApiCacheMangerEx: apicache path=/storage/emulated/0 state=mounted key=com.biyesheji.as#10265#256
I/HwApiCacheMangerEx: apicache path=/storage/emulated/0 state=mounted key=com.biyesheji.as#10265#0
I/MultiDex: VM with version 2.1.0 has multidex support
Installing application
VM has multidex support, MultiDex support library is disabled.
I/AwareBitmapCacher: init processName:com.biyesheji.as pid=28871 uid=10265
E/AwareLog: AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@6682ec8
AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@f4d0b61
D/OpenGLRenderer: disableOutlineDraw is true
V/ActivityThread: callActivityOnCreate
W/om.biyesheji.a: Accessing hidden field Landroid/view/LayoutInflater;->mFactorySet:Z (greylist-max-p, reflection, denied)
W/System.err: java.lang.NoSuchFieldException: No field mFactorySet in class Landroid/view/LayoutInflater; (declaration of 'android.view.LayoutInflater' appears in /system/framework/framework.jar!classes3.dex)
at java.lang.Class.getDeclaredField(Native Method)
at com.noober.background.BackgroundLibrary.forceSetFactory2(BackgroundLibrary.java:70)
at com.noober.background.BackgroundLibrary.inject(BackgroundLibrary.java:44)
at com.noober.background.BLActivityLifecycleRegister.onActivityCreated(BLActivityLifecycleRegister.java:10)
at android.app.Application.dispatchActivityCreated(Application.java:380)
W/System.err: at android.app.Activity.dispatchActivityCreated(Activity.java:1252)
at android.app.Activity.onCreate(Activity.java:1537)
at androidx.core.app.ComponentActivity.onCreate(ComponentActivity.java:81)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:149)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:313)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
at com.biyesheji.as.MainActivity.onCreate(MainActivity.java:35)
at android.app.Activity.performCreate(Activity.java:8086)
at android.app.Activity.performCreate(Activity.java:8074)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
V/HwWidgetFactory: : successes to get AllImpl object and return....
I/OverScrollerOptimization: start init SmartSlideOverScroller and get the overscroller config
get the overscroller config
W/om.biyesheji.a: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
W/om.biyesheji.a: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
D/ActivityThread: add activity client record, r= ActivityRecord{659e01d token=android.os.BinderProxy@d4924e3 {com.biyesheji.as/com.biyesheji.as.MainActivity}} token= android.os.BinderProxy@d4924e3
D/HiTouch_PressGestureDetector: onAttached, package=com.biyesheji.as, windowType=1, mHiTouchRestricted=false
I/iGraphics: [0020080c] pn: com.biyesheji.as, p: 28871
[0030080c] no spt app: com.biyesheji.as
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
W/Gralloc3: mapper 3.x is not supported
E/: APS:IFLoad:importExternalFunctions, search function createNewHwApsUtils failed, dlsym err:undefined symbol: createNewHwApsUtils
D/: APS:importExternalFunctions OK
I/HwViewRootImpl: removeInvalidNode jank list is null
D/OpenGLRenderer: disableOutlineDraw is true
W/Settings: Setting device_provisioned has moved from android.provider.Settings.Secure to android.provider.Settings.Global.
V/HiTouch_HiTouchSensor: User setup is finished.
I/HwViewRootImpl: removeInvalidNode all the node in jank list is out of time
D/HwAutofillHelper: recordCurrentInfo:0
inputType = 131073
I/AssistStructure: Flattened final assist data: 1632 bytes, containing 1 windows, 9 views
D/AwareBitmapCacher: handleInit switch not opened pid=28871
D/HwAutofillHelper: recordCurrentInfo:0
inputType = 129
inputType is password, now record
V/AudioManager: querySoundEffectsEnabled...
I/**********************: TEST_1
W/System.err: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2266)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at com.biyesheji.as.utils.DBUtil.getUserByUsername(DBUtil.java:21)
at com.biyesheji.as.MainActivity$OnClick.onClick(MainActivity.java:83)
at android.view.View.performClick(View.java:7192)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
at android.view.View.performClickInternal(View.java:7166)
W/System.err: at android.view.View.access$3500(View.java:824)
at android.view.View$PerformClick.run(View.java:27592)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565)
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
at java.net.InetAddress.getAllByName(InetAddress.java:1152)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
... 24 more
D/DBUtil: 数据操作异常
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer: disableOutlineDraw is true
W/libEGL: EGLNativeWindowType 0x7ac6783010 disconnect failed