我无法使用JDBC驱动程序在我的应用程序和Oracle数据库之间建立连接。
主机Oracle版本:Oracle数据库11g版本11.2.0.1.0 - 64位生产
.Jar jdbc驱动程序我试过:ojdbc5.jar,ojdbc6.jar,ojdbc14.jar,全部来自oracle本身。 我已经在清单中授予了应用程序的权限。
<uses-permission android:name="android.permission.INTERNET" />
我完全没有回复,logcat中没有任何内容。 SQL语句对远程数据库没有影响。 我可以使用SQL Plus在我的计算机上使用相同的登录凭据连接远程数据库,并拥有所有权限。
MainActivity.java的代码
package testapp.myapplication;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import java.sql.ResultSet;
import java.util.ArrayList;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
super.onCreate(savedInstanceState);
ConnectOra db = new ConnectOra();
ResultSet rs = db.getResult();
ArrayList<String> list = new ArrayList<String>();
while (rs.next()) {
list.add(rs.getString(1));
System.out.println(rs.getString(1));
}
} catch (Exception e) {
System.out.print(e);
}
}
public void btn(View view) {
startActivity(new Intent(MainActivity.this, MainActivity.class));//Just to refresh the mainact.
}
}
ConnectOra.java的代码:
package testapp.myapplication;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import android.util.Log;
public class ConnectOra {
private Connection conn;
private Statement stmt;
public ConnectOra() throws ClassNotFoundException {
try {
System.out.println("in try");
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@103.A.B.C:15210/mdb";
this.conn = DriverManager.getConnection(url,"XXX","pw");
this.conn.setAutoCommit(false);
this.stmt = this.conn.createStatement();
} catch(SQLException e) {
Log.d("tag", e.getMessage());
}
}
public ResultSet getResult() throws SQLException {
ResultSet rset = stmt.executeQuery("select * from emp;");
System.out.println(rset+"");
stmt.close();
return rset;
}
}
所选答案有效,我的代码也有效。
Android无法使用ojdbc5.jar
,ojdbc6.jar
,因为它们需要Android上没有的某些Java SE组件。因此,我们必须使用ojdbc14.jar
,因为它早于ojdbc5.jar
和ojdbc6.jar
并且不需要高级Java组件,这也意味着ojdbc14.jar
只有基本函数ojdbc14.jar
1}}。
使用SQLNET.ALLOWED_LOGON_VERSION=8
,您可能需要设置&#34; sqlnet.ora
&#34;在运行数据库的远程主机上的ORA-28040: No matching authentication protocol.
中。这将允许较旧的客户端连接到较新的DB,否则会引发错误close
执行SQL语句后Connection
Statement
和In [9]:
df.merge(df1, how='outer')
Out[9]:
Table_Name Table_Alias Variable_Name
0 tab_1 t1 Owner
1 tab_1 t1 Owner_Id
2 tab_2 t2 Purchase_date
3 tab_3 t3 Maintenance_cost
也很重要,否则更改不会保存在实际的远程数据库中。
答案 0 :(得分:0)
您可以尝试使用此代码并发布错误日志。另外要注意的是,你真的不应该这样做,你应该有一个像this这样的应用程序服务器来管理与Oracle DB的连接。但是如果你想玩它不安全,试试这个代码:
String driver = "oracle.jdbc.driver.OracleDriver"; //
String serverName = "localhost";
String portNumber = "1521";
String db = "XE";
String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":"
+ db; // connectOracle is the data
// source name
String user = "system"; // username of oracle database
String pwd = "root"; // password of oracle database
Connection con = null;
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
try {
Class.forName(driver);// for loading the jdbc driver
System.out.println("JDBC Driver loaded");
con = DriverManager.getConnection(url, user, pwd);// for
// establishing
// connection
// with database
Statement stmt = con.createStatement();
serverSocket = new ServerSocket(8888);
System.out.println("Listening :8888");
while (true) {
try {
socket = serverSocket.accept();
System.out.println("Connection Created");
dataInputStream = new DataInputStream(
socket.getInputStream());
dataOutputStream = new DataOutputStream(
socket.getOutputStream());
System.out.println("ip: " + socket.getInetAddress());
// System.out.println("message: " +
// dataInputStream.readUTF());
ResultSet res=stmt.executeQuery("select * from person");
while(res.next()){
System.out.println(res.getString(1));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (dataInputStream != null) {
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dataOutputStream != null) {
try {
dataOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
再读一遍,不建议这样做。