public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
connection();
}
});
}
public void connection(){
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
Connection conn=DriverManager.getConnection("jdbc:jtds:sqlserver://Asus-PC/PJH.V1;","","");
Log.w("Connection", "Error");
Statement stat=conn.createStatement();
ResultSet result=stat.executeQuery("SELECT * FROM Javher1");
TextView tv=(TextView)findViewById(R.id.textView1);
tv.setText(result.getString(1));
conn.close();
} catch (Exception e) {
// TODO: handle exception
Log.e("Error",e.getMessage());
Toast.makeText(getApplicationContext(), "Error"+e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
我在库中添加了一个jtds1.2.7-jar文件。
代码运行我收到以下错误:
错误:未知服务器主机名'Asus-PC'。
如果有人知道,请帮助我!
提前致谢。
答案 0 :(得分:3)
从不,永远,永远直接从应用直接连接到数据库。黑客可以轻松掌握所有数据库,窃取所有数据并擦除数据库清理......!
您应该使用网络服务。您的应用只应仅 与服务进行通信,而不是直接与数据库进行通信...
不要盲目地遵循任何这样说的教程,这是一个非常大的安全问题。
答案 1 :(得分:0)
将计算机名称('华硕PC')替换为 ip-address
您是否在模拟器中运行尝试此 10.0.2.2
这不是有效的代码,请使用Web服务访问数据库。
http://sochinda.wordpress.com/2011/05/27/connecting-to-net-web-service-from-android/
http://www.codeproject.com/Articles/304302/Calling-Asp-Net-Webservice-ASMX-From-an-Android-Ap
答案 2 :(得分:0)
看看它对你有帮助。
<强> 1 强>
您要做的第一件事就是转到https://sourceforge.net/projects/jtds/链接并下载驱动程序以通过ms sql连接应用程序。 下载jtds-1.3.1-dist.zip(551.2 kB)zip文件并解压缩,找到里面的jar文件夹(jtds-1.3.1.jar)。
<强> 2 强>
下一步是打开你的android工作室并创建一个新项目。 (空白活动)。
现在打开Root Explorer(ALT + 1)
从左上角显示android的选项卡中,从下拉列表中选择项目模块。
您可以在顶部看到项目的名称。右键单击此按钮并添加新目录。将上面的jar文件(从dist文件夹解压缩)粘贴到文件夹中
现在将jar文件添加为项目中的模块。右键单击项目目录,然后单击选项add module。
浏览添加了jar文件的文件夹名称(在上面的步骤中),并允许gradle正确同步。
现在是时候将这个lib作为依赖项添加到你的android studio项目中了。
为此,再次右键单击项目名称选项卡,然后移至打开模块配置(几乎是最后一个选项)。
它会打开一个显示项目的窗口。移至app dir(左侧最后一个标签)并单击+图标
添加依赖性
(作为一个模块)
单击它将显示刚刚创建的模块。现在加上这个。
它将自动编译并在gradle文件中添加依赖项。
第3 强>
你差不多完成了。
只需将代码复制为主要活动。
package com.example.administrator.testsqlserver;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import net.sourceforge.jtds.jdbc.*;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}}
public void Connect(View v)
{
EditText editText=(EditText)findViewById(R.id.editText);
String code = editText.getText().toString();
Log.i("Android"," MySQL Connect Example.");
Connection conn = null;
try {
String driver = "net.sourceforge.jtds.jdbc.Driver";
Class.forName(driver).newInstance();
//test = com.microsoft.sqlserver.jdbc.SQLServerDriver.class;
String connString = "jdbc:jtds:sqlserver://yourip :1433/your db;encrypt=fasle;user=username;password=password;";
String username = "your username";
String password = "your password";
conn = DriverManager.getConnection(connString,username,password);
Log.w("Connection","open");
Statement stmt = conn.createStatement();
Toast.makeText(MainActivity.this, "This works", Toast.LENGTH_SHORT).show();
ResultSet reset = stmt.executeQuery("SELECT NAME FROM tablename ;");
while(reset.next()){
String ans= reset.getString(1);
Toast.makeText(MainActivity.this,ans, Toast.LENGTH_SHORT).show();
}
conn.close();
} catch (Exception e)
{
Log.w("Error connection","" + e.getMessage());
e.printStackTrace();
}
}
}。
答案 3 :(得分:0)
我已经这样做了,但是效率很低。 正如其他评论提到的那样,请改用Web服务,您不应该在设备上保存数据库凭据。
要使其正常工作,首先需要做两件事,
adapter = new TimeAdapter(times, this ,one);
如果您位于同一网络上,则还必须更改输入到LAN IP的PC名称;如果要通过Internet连接,则必须更改公共IP地址。
此外,如果您与服务器不在同一网络上,则还必须在连接到服务器的路由器上启用端口转发。
警告:端口将始终显示为已关闭,直到您在SQL Server上启动数据库引擎时,该名称为具有数据库的计算机的IP地址。