针对JavaMySQL连接无法正常工作:找不到合适的驱动程序和java连接mysql失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展'java.sql.SQLException:找不到合
针对Java MySQL连接无法正常工作:找不到合适的驱动程序和java连接mysql失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展'java.sql.SQLException: 找不到合适的驱动程序' [SQLException, Heroku, Postgresql]、(Java 学习笔记) Java Threading (Java 线程)、Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8、Android:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ java.lang.String java.lang.Object.toString()”等相关知识,希望可以帮助到你。
本文目录一览:- Java MySQL连接无法正常工作:找不到合适的驱动程序(java连接mysql失败)
- 'java.sql.SQLException: 找不到合适的驱动程序' [SQLException, Heroku, Postgresql]
- (Java 学习笔记) Java Threading (Java 线程)
- Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8
- Android:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ java.lang.String java.lang.Object.toString()”
Java MySQL连接无法正常工作:找不到合适的驱动程序(java连接mysql失败)
首先,您找不到驱动程序。您必须通过这样调用Drive类来加载它们:
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// Cannot find driver for MySQL
}
然后,您尝试使用HTTP协议连接到数据库。但是,数据库拥有它们自己的数据库(默认情况下带有3306端口),因此您必须使用如下地址:
jdbc:mysql://myserver.com/schema
最后:不要忘记在getConnection方法的最后2个字段中添加用户名和密码
'java.sql.SQLException: 找不到合适的驱动程序' [SQLException, Heroku, Postgresql]
如何解决''java.sql.SQLException: 找不到合适的驱动程序'' [SQLException, Heroku, Postgresql]
我目前正在尝试将我的一个旧项目部署到 heroku。 在本地一切正常。 (还有由 heroku 提供的 amazonaws psql 数据库)。 但是,一旦我尝试将应用程序部署到 heroku,我就会在 heroku 控制台中收到此(见下文)错误。
注意:有些字母用''x''代替
java.sql.sqlException: No suitable driver found for jdbc:postgresql://xxx-xx-xx-xxx-xxx.eu-west-1.compute.amazonaws.com:5432/dxxxx5xx6xxxxx
为了将 Java 应用程序连接到 postgresql 数据库,我这样做:
String jdbcURL = System.getenv("DATABASE_SERVER");
String username = System.getenv("DATABASE_USERNAME");
String password = System.getenv("DATABASE_PASSWORD");
try {
connection = DriverManager.getConnection(jdbcURL,username,password);
System.out.println("Verbindung zur Datenbank hergestellt");
statement = connection.createStatement();
} catch (sqlException e) {
e.printstacktrace();
}
完整代码可以在这里看到:
https://github.com/ConfusingBot/bot/blob/master/src/de/confusingbot/manage/sql/SQLManager.java
env 变量在 heroku 和 local 中定义。本地一切正常,使用相同的变量。
pom.xml: https://github.com/ConfusingBot/bot/blob/master/pom.xml
谢谢
编辑: 我发现heroku中确实存在postgres依赖项..(见下图)但是找不到驱动程序..
但不幸的是,在我的情况下,他们的修复不起作用:/
解决方法
构建包含所有依赖项的 jar 工作得很好.. 为此,我们必须在 pom.xml 中定义一个插件,仅此而已..(见下文)
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>de.confusingbot.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
感谢提示:https://stackoverflow.com/a/56800302/14108895
(Java 学习笔记) Java Threading (Java 线程)
Java Threading (Java 线程)
● Process & Thread
Processes are the abstraction of running programs: A binary image, virtualized memory, various kernel resources, an associated security context, and so on.
Threads are the unit of execution in a process: A virtualized processor, a stack, and program state.
Threads are sometimes called lightweight processes. Both processes and threads provide an execution environment, but creating a new thread requires fewer resources than creating a new process.
Threads exist within a process — every process has at least one. Threads share the process''s resources, including memory and open files. This makes for efficient, but potentially problematic, communication.
Multithreaded execution is an essential feature of the Java platform. Every application has at least one thread — or several, if you count "system" threads that do things like memory management and signal handling. But from the application programmer''s point of view, you start with just one thread, called the main thread. This thread has the ability to create additional threads, as we''ll demonstrate in the next section.
●
● Processes
--Will by default not share memory
--Most file descriptors not shared
--Don''t share filesystem context
--Don''t share signal handling
● Threads
--Will by default share memory
--Will share file descriptors
--Will share filesystem context
--Will share signal handling
● Thread pool
Thread pool represents a group of worker threads that are waiting for the job and reuse many times,
● Thread life cycle & states
Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8
如何解决Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8?
我在这里可以用于 Android 应用程序开发的最大版本是多少。 我正在开发一个 Android 库,我想知道我是否设置了我的库 build.gradle
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
它将与 Android 应用程序中定义的所有先前和更高版本的 Java 版本兼容吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Android:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ java.lang.String java.lang.Object.toString()”
面对我正在使用的练习应用程序的问题。我面临与toString方法有关的NullPointerException问题。作为android应用程序开发的新手,即使经过研究,我也不确定确切的原因。因此,我要求一个更熟悉堆栈跟踪的人来帮助我。
注意:当我单击列表视图条目以访问日记条目的编辑页面时,将发生错误。但是,它似乎根本没有进入编辑页面。
在下面,您将找到我的活动代码及其堆栈跟踪。
活动代码:
import android.app.AlertDialog;import android.content.DialogInterface;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.content.Intent;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;public class ViewDiaryEntries extends AppCompatActivity {// Database HelperMyDBHandler db;// ListviewListView data_list;// Test varpublic final static String KEY_EXTRA_DATA_ID = "KEY_EXTRA_DATA_ID";@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_diary_entries); db = new MyDBHandler(this); // Displays the database items. displayItems();}// To display items in the listview.public void displayItems(){ // To display items in a listview. ArrayList db_data_list = db.getDiaryDBDataList(); ArrayAdapter listAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, db_data_list); // Set the adapter for the listview data_list = (ListView) findViewById(R.id.dataListView); data_list.setAdapter(listAdapter); /* Experiment -------------------------------------------------------------*/ data_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Selected item store String selectedEntry = ((TextView) view).getText().toString(); // Test for regular expression String[] listViewItemSplit = selectedEntry.split(" - "); String listViewItempt1 = listViewItemSplit[0]; // For date and time //String listViewItempt2 = listViewItemSplit[1]; // For save file name //Toast.makeText(ViewDiaryEntries.this, listViewItempt1, Toast.LENGTH_LONG).show(); if(listViewItempt1.equals("")){ Toast.makeText(ViewDiaryEntries.this, "Error. Unable to detect entry ID.", Toast.LENGTH_LONG).show(); } else{ // Pass on the data: Intent editEntry = new Intent(ViewDiaryEntries.this, editdiaryentry.class); editEntry.putExtra(KEY_EXTRA_DATA_ID, listViewItempt1); startActivity(editEntry); } } });}// For the go back button.public void viewdiarytoinitialdiary_backbutt(View v){ // Create and start new intent going back ot main page. Intent main_page = new Intent(ViewDiaryEntries.this, User_Main_Menu_Options.class); main_page.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(main_page);}// For the about button.public void viewdiarypage_directionabout_butt(View v){ // Create an alert dialog final AlertDialog.Builder about_page_dialog = new AlertDialog.Builder(ViewDiaryEntries.this); about_page_dialog.setTitle("About This Page:"); // Inputs values for the dialog message. final String dialog_message = "This page will show you any saved diary entries you''ve.\n\n To edit an entry, do the following: \n\n- Take note of the Entry ID# (first value on entry display) \n- Type it in the number box at the bottom. \n- Press Edit Record icon next to number box, and wait for it to load."; about_page_dialog.setMessage(dialog_message); about_page_dialog.setPositiveButton("Got it!", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Closes the dialog. dialog.cancel(); } }); // Shows the dialog. about_page_dialog.show();}// Main menu button.public void viewDiaryEntriesMainMenushortcut_butt(View v){ // Creates main menu alert dialog. AlertDialog.Builder mainMenu_Dialog = new AlertDialog.Builder(this); mainMenu_Dialog.setIcon(R.drawable.main_menu_symbol); mainMenu_Dialog.setTitle("Main Menu"); // Creates array adapter with items to fill the menu with. final ArrayAdapter<String> menuItemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); menuItemsAdapter.add("Home Screen"); menuItemsAdapter.add("Diary"); menuItemsAdapter.add("Tests"); menuItemsAdapter.add("Activity"); menuItemsAdapter.add("Media"); menuItemsAdapter.add("Thought of the Day"); menuItemsAdapter.add("Inspirational Quotes"); menuItemsAdapter.add("Resources"); menuItemsAdapter.add("Settings"); // To close menu. mainMenu_Dialog.setPositiveButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // To go to appropriate page upon selection. mainMenu_Dialog.setAdapter(menuItemsAdapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String selectedItem = menuItemsAdapter.getItem(which); if(selectedItem.equals("Home Screen")){ // Goes to main menu. Intent mainMenu = new Intent(ViewDiaryEntries.this, User_Main_Menu_Options.class); mainMenu.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(mainMenu); } else if(selectedItem.equals("Diary")){ // Goes to diary page. Intent diaryPage = new Intent(ViewDiaryEntries.this, ViewDiaryEntries.class); diaryPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(diaryPage); } else if(selectedItem.equals("Tests")){ // Goes to tests page. Intent testsPage = new Intent(ViewDiaryEntries.this, TestChoices.class); testsPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(testsPage); } else if(selectedItem.equals("Media")){ // Goes to media page. Intent mediaPage = new Intent(ViewDiaryEntries.this, initialMediaPage.class); mediaPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(mediaPage); } else if(selectedItem.equals("Thought of the Day")){ // Goes to thought of the day page. Intent thoughtofthedayPage = new Intent(ViewDiaryEntries.this, thoughtQuotes.class); thoughtofthedayPage.putExtra("quote_or_thought", 2); thoughtofthedayPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(thoughtofthedayPage); } else if(selectedItem.equals("Inspirational Quotes")){ // Goes to inspirational quotes page. Intent inspirationalquotesPage = new Intent(ViewDiaryEntries.this, thoughtQuotes.class); inspirationalquotesPage.putExtra("quote_or_thought", 1); inspirationalquotesPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(inspirationalquotesPage); } else if(selectedItem.equals("Settings")){ // Goes to settings page. Intent settingsPage = new Intent(ViewDiaryEntries.this, settings.class); settingsPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(settingsPage); } } }); mainMenu_Dialog.show();}// For the settings button.public void viewdiarypagelisttoSettings_butt(View v){ // Goes to settings page. Intent settingsPage = new Intent(ViewDiaryEntries.this, settings.class); settingsPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(settingsPage);}// For new entry.public void viewdiarypageaddEntry_butt(View v){ // Opening up the diary add intent. Intent newdiaryEntry = new Intent(ViewDiaryEntries.this, newdiaryentry.class); startActivity(newdiaryEntry);}}
这是我看到的堆栈跟踪:
java.lang.NullPointerException: Attempt to invoke virtual method ''java.lang.String java.lang.Object.toString()'' on a null object reference at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:194) at android.widget.Spinner.onMeasure(Spinner.java:580) at android.support.v7.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:407) at android.view.View.measure(View.java:18794) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) at android.view.View.measure(View.java:18794) at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1283) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.widget.ScrollView.onMeasure(ScrollView.java:340) at android.view.View.measure(View.java:18794) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:18794) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18794) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18794) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18794) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) at android.view.View.measure(View.java:18794) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
任何对解决方案的帮助将不胜感激。
编辑:
因此,在从数据库和与之交互的活动之间的代码来回浏览之后,我设法使其重新工作。以下是我按确切顺序执行的操作:
- 我意识到我有一个日期字段没有接收任何数据,对此进行了纠正。
- 清理了项目。
- 重新启动Android Studio(基本上停止开发环境的所有操作)。
- 从我的开发手机上卸载了该应用。
- 重新启动android studio并重新安装该应用程序。
- 我以某种方式工作= _ =,是的,这很神奇。
老实说,我不知道哪一步真正解决了它。我猜这是数据库中的日期字段在我没有收到任何数据的同时给我带来了麻烦。
答案1
小编典典您的阵列中ArrayAdapter
至少包含一个条目null
。那里不能有空值。
数组被填充,getDiaryDBDataList()
所以问题也在那里。
我们今天的关于Java MySQL连接无法正常工作:找不到合适的驱动程序和java连接mysql失败的分享已经告一段落,感谢您的关注,如果您想了解更多关于'java.sql.SQLException: 找不到合适的驱动程序' [SQLException, Heroku, Postgresql]、(Java 学习笔记) Java Threading (Java 线程)、Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8、Android:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ java.lang.String java.lang.Object.toString()”的相关信息,请在本站查询。
本文标签: