【问题标题】:SqlConnection throws an error on connection testSqlConnection 在连接测试时抛出错误
【发布时间】:2019-09-05 11:37:30
【问题描述】:

我正在尝试测试与 msql 服务器的连接,它向我抛出了一个错误 System.err: java.lang.RuntimeException: No message resource found for message property prop.servertype。它一路经过,停在con = DriverManager.getConnection(conString, user, password);

  private class AsyncTaskRunner extends AsyncTask<String, String, String>
    {
        ProgressDialog progressDialog;
        boolean conSuccess = false;
        String host, port, dbname, user, password, instance;

        @Override
        protected String doInBackground(String... params)
        {
            try
            {
                Log.e("SQLConfig", "Estou dentro do try");


                String driver = "net.sourceforge.jtds.jdbc.Driver";
                String conString;
                if (TextUtils.isEmpty(port))
                {
                    conString = "jdbc:jtds:sqlserver://" + host + "/" + instance + ";DatabaseName=" +dbname;
                }
                else
                {
                    conString = "jdbc:jtds:sqlserver://" + host + ":" + port + "/" + instance + ";DatabaseName=" +dbname;
                }
                Connection con;
                Class.forName(driver);
                Log.e("SQLConfig", "Driver metida com sucesso");
                //con = DriverManager.getConnection(testCon);
                Log.i("Carlos",conString + " - User: " + user + " - Password: " + password);
                con = DriverManager.getConnection(conString, user, password);
                Log.e("SQLConfig", "Consegui fazer a ligação com sucesso");
                con.close();
                Log.e("SQLConfig", "Fechar ligação ");
                conSuccess = true;
            }
            catch (Exception e)
            {
                e.printStackTrace();
                Log.e("SQLConfig", "Não consegui fazer a ligação");
                Log.e("SQLConfig", e.toString());
                Log.e("SQLConfig", e.getMessage());
            }
            return null;
        }

完整的错误堆栈:

W/System.err: java.lang.RuntimeException: No message resource found for message property prop.servertype
        at net.sourceforge.jtds.jdbc.Messages.get(Messages.java:120)
        at net.sourceforge.jtds.jdbc.Messages.get(Messages.java:67)
        at net.sourceforge.jtds.jdbc.Driver.parseURL(Driver.java:374)
        at net.sourceforge.jtds.jdbc.Driver.setupConnectProperties(Driver.java:239)
        at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:182)
        at java.sql.DriverManager.getConnection(DriverManager.java:569)
W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:219)
        at com.example.viewer.dbconfig$AsyncTaskRunner.doInBackground(dbconfig.java:210)
        at com.example.viewer.dbconfig$AsyncTaskRunner.doInBackground(dbconfig.java:181)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
E/SQLConfig: Não consegui fazer a ligação
    java.lang.RuntimeException: No message resource found for message property prop.servertype
    No message resource found for message property prop.servertype

从手机打印:

当我点击“Testar ligação”按钮时,它会执行验证文本框是否为空的操作

        _btnTestCon.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // Verificar se os dados forem todos preenchidos ou não
                if (_editTextHost.getText().toString().trim().equals("") || _editTextInstance.getText().toString().trim().equals("") ||
                        _editTextDbName.getText().toString().trim().equals("") || _editTextUser.getText().toString().trim().equals("") || _editTextPass.getText().toString().trim().equals(""))
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(dbconfig.this);

                    builder.setMessage(R.string.config_message_needMoreInfo)
                            .setCancelable(false)
                            .setPositiveButton(R.string.general_ok, new DialogInterface.OnClickListener()
                            {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i)
                                {
                                    dialogInterface.cancel();
                                }
                            });
                    builder.show();
                }
                // Testar a ligação
                else
                {
                    AsyncTaskRunner runner = new AsyncTaskRunner();
                    runner.execute();
                }
            }
        });
    }

我希望 DriverManager.getConnection 返回 log.e.

【问题讨论】:

  • 你应该对后台调用使用改造..
  • 为什么顺便把这个问题标记为mysql?您真的在运行 SQL Server 数据库实例吗?

标签: java android sql-server android-studio


【解决方案1】:

请提供完整的堆栈跟踪和日志记录。 你是如何执行你的代码的? 您是否在预期的主机和端口上运行 SQL Server 数据库?

查看文档:http://jtds.sourceforge.net/faq.html

jTDS 的 URL 格式为:

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

其中是“sqlserver”或“sybase”之一(它们的 意思很明显),是数据库服务器所在的端口 监听(SQL Server 的默认值为 1433,Sybase 的默认值为 7100)和 是数据库名称——JDBC术语:目录——(如果不是 指定,使用用户的默认数据库)。

您的网址例如:

jdbc:jtds:sqlserver://host:1337/instance;DatabaseName=dbname

您确定网址正确吗? 您是否设置了端口号? 实例是否存在? 属性 DatabaseName 是否存在,您是否将正确的值传递给它?

【讨论】:

  • 是的,我的网址是正确的,数据库名称也存在
  • 您使用的是哪个 JTDS jar?它在类路径上吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多